VBA開発

西暦→和暦変換-和暦→西暦変換【エクセルマクロ】【DATEVALUE関数】

西暦から和暦、和暦から西暦に変換

VBAやエクセルを扱っていると、西暦から和暦、和暦から西暦に変換するケースも多いです。
その時に使用する書式や、方法を纏めます。

西暦から和暦を算出(エクセル関数)TEXT関数

エクセルのセル内で日付を「シリアル値」で持っていれば、和暦に変更するのは簡単です。

セルA1に「2020/6/1」と表記されていれば、
和暦を表示したいセルに「=TEXT(A1,”ggge”)」とすると「令和2」と表示します。

■サンプル

関数結果
=TEXT(A1,”ggge年”)令和2年
=TEXT(A1,”gggee年”)令和02年
=TEXT(A1,”ggge年m月d日”)令和2年6月1日
=TEXT(A1,”ggge年m月d日aaaa”)令和2年6月1日月曜日

西暦から和暦を算出(VBAマクロ)

こちらもエクセル関数同様「シリアル値」を持っていれば、Format関数で必要情報を、抜きだすだけです。

Private Sub Calender_Converte()
  
  MsgBox Format(Now, "ggge年")           '→令和2年
  MsgBox Format(Now, "gggee年")          '→令和02年
  MsgBox Format(Now, "ggge年m月d日")     '→令和2年6月1日
  MsgBox Format(Now, "ggge年m月d日aaaa") '→令和2年6月1日月曜日

'■セルA1の場合はNowをCells(1,1)とかRange("A1")とかに変更してください。
End Sub

和暦から西暦を算出(エクセル関数)DATEVALUE関数

和暦の場合は、簡単に変換できない場合があります。

■理由
和暦の場合、日付自体を「シリアル値」で持っておらず、「文字列」で持っている為です。

DATEVALUE関数やFormat関数を使用する場合は、渡す値が「シリアル値」である必要があります。
その為、和暦データをシリアル値に変換する必要があるのですが、ここが厄介です。

「令和2年6月1日」や「2020/06/01」のようにエクセルが日付と認識する形式でないとエラーが出ます。
下記例を参考にしてください。

計算式結果
=DATEVALUE(“令和2年”)#VALUE!
=DATEVALUE(“令02年6月1日”)#VALUE!
=DATEVALUE(“令和2年6月1日”)43983
=DATEVALUE(“令和2年6月1日月曜日”)#VALUE!
=DATEVALUE(“20200601”)#VALUE!
=DATEVALUE(“2020/06/01”)43983
=DATEVALUE(“R2/06/01”)43983

シリアル値「43983」と出れば、あとは前述のTEXT関数なりFormat関数で処理をすれば済みます。

エラーが出ている部分は正しい日付表記にすれば「#VALUE!」は消えます。
(例)=DATEVALUE(“令和2年”)→=DATEVALUE(“令和2年”&”1月1日”)

注意点

エクセルで管理しているファイルがあり、入力が西暦や和暦等まちまちなファイルがあった場合は、無理やり変換してデータをシリアル値に変換しておくべきでしょう。
あくまでも和暦は表示のみの話で、データは西暦(シリアル値)で持つ方が汎用性があります。

その他書式一覧表

例)2020/6/1 月曜日の場合

分類書式結果
西暦yyyy2020
yy20
和号gR
gg
ggg令和
和暦e2
ee02
m6
mm06
mmmJun
mmmmJune
d1
dd01
曜日dddMon
ddddMonday
aaa
aaaa月曜日

西暦、和暦一覧表

西暦、和暦比較一覧表はこちら

 

コメント

タイトルとURLをコピーしました