今回もEXCELの備忘録です![]()
EXCELで日付を扱う場合、ワークシート上で計算に使用できるのは、1900/1/1 ~ 9999/12/31 の範囲であることを御存じでしょうか?
VBAのDATE型であれば、100/1/1 ~ 9999/12/31 の範囲で計算を行うことが可能となります。
しかしですね、先述の通りにワークシートのセルで扱えるのは 1900/1/1 以降の日付となるので、VBAで計算した結果がそれより以前の日付だった場合にはエラー表示となってしまいます。
それでも、どうしても古い日付を表示したい!
というのであれば、DATE型ではなく、文字列に変換してやることで表示は可能です。
勿論、DATE型ではないので計算には使用できませんけど…![]()
あとですね、西暦→和暦 への変換をしたいというのもよくある話だと思うのですよ。
2022/4/5 ⇔ 令和4年4月5日
こういうやつですね![]()
実は最近のEXCELであれば、普通に変換してくれます。
但し、先述の通り 1900/1/1 以降の日付しか受け付けてくれませんので…
明治
大正
昭和
平成
令和
の5つの元号のみが変換対象となっておりまして、それより以前の 慶応 とか 元治 とかへの変換は、当然ながら出来ません。
それでも、どうしても古い元号を表示したい!
という人も居るかと思います。
では、どうすればいいのか…?
作ればいいのです!![]()
古い元号を使用する為に必要な情報は、元号、開始年月日、終了年月日の3つとなります。ただ、何度も書いていますが日付型は使用できませんので、年・月・日を分割して管理します。
元号・開始年・開始月・開始日・終了年・終了月・終了日
元号1つ辺りに、この7項目が必要となります。
これらを効率よく管理する為にEXCELのテーブルという機能を使用します。
流石に南北朝時代(同時に2つの元号が存在する)を含んでしまうと、実装が超絶面倒臭くなるので、統一後の 応永 からのデータを入力したのが下図となります。
実際は 令和 まで入力してあります。
令和はまだ終わっていないので、終了年月日を 9999/12/31 としてあります。
この終了年月日は 令和7981年12月31日 となりますね!![]()
テーブルには好きな名前が付けられます。
今回は 『 T_元号設定 』 という名前にしました。
T は Table (テーブル)の T です。
と、ここまでが前準備。
ここからがプログラミングの時間なのですが、長くなったのでいったん切ります。
完成後に変換した結果はこんな感じになります。
A列に変換元となる日付を入力すると、B列に和暦に変換された文字列が表示されます。
B列の文字列を更に西暦に再変換したものがC列となります。
7行目に注目してほしいのですが、1900/1/1 が 1899/12/31 と変換されていますね。
これは随分と長い間放置されたままになっている EXCEL の不具合なのです。
修正されない理由は以下のリンクからどうぞ。
1900/1/1 ~ 1900/2/29 の間の日付を扱う際は注意しましょう。
というわけで、今回はこの辺で。
次回は変換する為のメソッドを載せる予定です![]()



