MS Access Tips/Sample and VBA and Blog customize etc...

日付を漢数字に変換する関数

日付を 平成二十一年十月三日 というように漢字に変換したい。

掲示板で上記のような質問がありました。自分でも必要とする機会がありましたので、ユーザー定義関数を作成しました。備忘録も兼ねて紹介します。

DateToKanji.jpg

難易度:

単純に数字を漢数字に一字ずつ「平成二一年一〇月三日」というように変換するのは、特定文字の変換関数 で既に紹介した Num2KanjiNum関数 で可能です。今回のように、二桁に「十」を使う変換ですので、ちょっと難しいです。

掲示板ではVBA初心者でも理解しやすいようにベタなコードのものを紹介しました。

似たようなコードが繰り返し出てくるのはしゃくですよね。(私だけ?^^;)

配列とFor文を使って繰り返し部分を纏めたのが下記のコードです。

たいして短くなってないし、最初の方が可読性が高いという意見もあろうかと思います。今回は三回だけの繰り返しなのでそうなりますね。

もっと繰り返しが多かったり、繰り返し回数が可変だったりする処理があったときにロジックの参考にしてください。

拍手する

4 Comments

igachan says..."DateTypeで抜き出したものはできませんか?"

hatenaさん。何度も質問して申し訳ありません。このサイトが一番参考になるもので拝見しては試みさせていただいております。ありがとうございます。表題の件ですが、日付が入ったテキストボックス(書式・・・gge年)のコントロールソースに

=DateTokanji(DatePart("yyyy",[日付]))

と入力してフォーム画面に戻すと

明治38年

と表示されます。部分的に取り出したものは不可能なのでしょうか?
ちなみに DateTokanji()を書き加えなければ 西暦では表示されるのですが・・・。

2014.04.01 11:35 | URL | #- [edit]
hatena says..."re:DateTypeで抜き出したものはできませんか?"

引数には、日付/時刻型の値を渡さないとだめです。

漢字に変換してから、"年"より前を切り出すようにしましょう。

=Left(DateTokanji([日付]),Instr(DateTokanji([日付]),"年"))


頻繁に使うなら、関数を作成しておくといいでしょう。


Public Function DateToKanjiY(vDate As Variant)
  Dim Num As Byte
  Const KanSuuji = "一二三四五六七八九"

  DateToKanjiY = Null
  If Not IsDate(vDate) Then Exit Function
  
  DateToKanjiY = Format(vDate, "ggg")
  Num = Val(Mid(Format(vDate, "ee"), 1, 1))
  If Num > 1 Then DateToKanjiY = DateToKanjiY & Mid(KanSuuji, Num, 1)
  If Num > 0 Then DateToKanjiY = DateToKanjiY & "十"

  Num = Val(Mid(Format(vDate, "ee"), 2, 1))
  If Num > 0 Then DateToKanjiY = DateToKanjiY & Mid(KanSuuji, Num, 1)
  DateToKanjiY = DateToKanjiY & "年"
End Function

記事の最初の関数の年の部分を取り出しただけです。
コントロールソースは下記のようにシンプルになります。

=DateToKanjiY([日付])

2014.04.01 12:13 | URL | #5uE6dEgY [edit]
igachan says...""

ありがとうございます。早速やってみます。

2014.04.01 18:33 | URL | #- [edit]
igachan says..."ありがとうございました。"

遅くなりましたがぶじにできました。ありがとうございます。感謝!! 感謝です!!。

2014.04.02 09:54 | URL | #- [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/185-39e78b4c
該当の記事は見つかりませんでした。