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関数)
こちらもエクセル関数同様「シリアル値」を持っていれば、Format関数で必要情報を、抜きだすだけです。
Private Sub Calender_Converte()
'2020/6/1(令和2年6月1日の場合)
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関数で処理をすれば済みます。
注意点
エクセルで管理しているファイルがあり、入力が西暦や和暦等まちまちなファイルがあった場合は、
無理やり変換して、データをシリアル値に変換しておくべきでしょう。
あくまでも和暦は表示のみの話で、データは西暦(シリアル値)で持つ方が汎用性があります。
その他書式一覧表
例)2020/6/1 月曜日の場合
| 分類 | 書式 | 結果 |
|---|---|---|
| 西暦 | yyyy | 2020 |
| yy | 20 | |
| 和号 | g | R |
| gg | 令 | |
| ggg | 令和 | |
| 和暦 | e | 2 |
| ee | 02 | |
| 月 | m | 6 |
| mm | 06 | |
| mmm | Jun | |
| mmmm | June | |
| 日 | d | 1 |
| dd | 01 | |
| 曜日 | ddd | Mon |
| dddd | Monday | |
| aaa | 月 | |
| aaaa | 月曜日 |
関連記事
- 西暦、和暦比較早見一覧表(エクセルにコピペ可能)
- 現年齢を算出する処理をパーツ化する【int関数応用】
- 年/月/日から日付データを取得する【DateSerial関数】
- 日付・時間に関する機能のまとめ(逆引き目次)




コメント