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関数】
- 日付・時間に関する機能のまとめ(逆引き目次)
コメント