

2019/5/1から元号が「令和」に変わりますが、和暦表記にしているセルの表示形式を「令和」にも対応できるようにしたいのですが、可能でしょうか??

もちろん可能です!
至急かどうか、また、至急の場合は対応したいセルによって対応方法が変わりますので、ケース別に対応方法をお伝えしますね。
至急性がなければOfficeの更新プログラムを待てばOK!
まず、大前提として新元号に対応するためのOffice更新プログラムがMicrosoft社から配布される予定です。
よって、特に至急性がなければ、その更新プログラムの配布を待ちましょう。
参照:2019 年 5 月の日本の元号変更に関する更新プログラム|Microsoftサポート
なお、更新プログラムを自動更新にしていれば、特別な操作は必要ありませんが、手動更新したい方は、以下のページを参考に操作が必要になります。
参照:日本の新元号対応に向けて Windows と Office を準備する方法|Microsoftサポート
Office更新プログラム配布前に「令和」表記にしたい場合の対応方法
次に、更新プログラムの配布を待たずに「令和」表記にしたい、という至急性が高い場合です。
正直、更新プログラムが配布されるまでの力技ですので、本当に至急性が高い場合のみにしておきましょうね。
なお、この場合、対応したいセルが以下のどちらにケースになるかで対応方法が異なります。
- 入力したセル自体の表示形式を「令和」表示にしたい
- すでに入力された日付を参照した別セルの値を「令和」表示にしたい
では、それぞれ具体的な方法について解説していきます。
ちなみに、全ケースで重要なポイントは、令和表記にするかどうかの分岐点として、「令和」の開始日のシリアル値を活用することです。
【参考】「令和」の開始日のシリアル値とは
「令和」は”2019/5/1”からとなります。
なお、「シリアル値」とは、Excel上で日付を管理する上での値です。
シリアル値は、”1900/1/1”を「1」とし、1日増えることに「1」加算されていきます。
つまり、「1900/1/1から何日目なのか」がシリアル値になりますね。
1900/1/1以降の元号の始期と終期をまとめた表は以下のとおりです。
上表のとおり、「令和」開始日となる”2019/5/1”のシリアル値は”43586”ですね。
これからの各パターンの解説にあたり、このシリアル値”43586”が複数出てきますので、混乱しないようにしておきましょう。
【ケース1】入力したセル自体の表示形式を「令和」表示にしたい
ケース1は、上図のように、”5/1”のように日付を入力したセル自体を和暦表示にしたい場合を指します。
このケースの対応方法は以下2パターンです。
- 条件付き書式
- VBA(Changeイベント)
ちなみに、セルの書式設定→表示形式→ユーザー定義は令和元年だけなら変更可能ですが、2年目以降を自動表記できないため、今回の対応方法から除いています。
【ケース1-1】条件付き書式
まずは、入力したセル自体の書式を変更する方法の1つ目のパターンは「条件付き書式」です。
こちらは、令和の年ごとに「条件付き書式」の「新しい書式ルール」を設定しておく必要があります。
よって、あらかじめ入力する可能性がある年数分のルールの設定が必要です。
たとえば、令和10年まで対応したいなら、令和1年~10年のそれぞれの年のルール、つまり計10のルール設定をする必要があります。
それぞれの年の設定方法は以下のとおりです。
【STEP1】「条件付き書式」に「新しいルール」を追加
まず、条件付き書式を設定したいセル範囲を選択(①)のうえ、リボン「ホーム」タブ(②)にある「条件付き書式」(③)の「新しいルール」をクリック(④)します。
【STEP2】「指定の値を含むセルだけを書式設定」の値を設定
次に、「新しい書式ルール」ダイアログが表示されますので、「指定の値を含むセルだけを書式設定」を選択(⑤)し、「次の値の間」を選択(⑥)のうえ、令和元年の開始日となる”2019/5/1”と終了日となる”2019/12/31”を入力(⑦)しましょう。
そして、「書式」ボタンをクリック(⑧)します。
【STEP3】セルの書式設定「表示形式」の「ユーザー定義」を設定
「セルの書式設定」ダイアログが表示されますので、「表示形式」タブの「ユーザー定義」を選択(⑨)し、[種類]の入力ボックスへ「”令和1年”m”月”d”日”」と入力(⑩)したら、「OK」ボタンをクリック(⑪)して「新しい書式ルール」ダイアログへ戻ります。
最後に、「新しい書式ルール」ダイアログの「OK」ボタンをクリック(⑫)して完了です。
条件付き書式を設定した結果
条件付き書式を設定したとおり、”2019/5/1”~”2019/12/31”に該当する日付を入力した場合に和暦表示されました!
あとは、令和2年目以降も上記と同じ手順で設定し、⑩のときの入力内容を「”令和2年”m”月”d”日”」のように設定していけばOKです。(令和2年目以降の⑦の開始日は”20xx/1/1″になりますのでご注意ください)
なお、令和1年目を「令和元年」としたい場合は、⑩の入力内容を「”令和元年”m”月”d”日”」とすれば良いですね。
【ケース1-2】VBAのChangeイベント
入力したセル自体の書式を変更する方法の2つ目のパターンは「VBAのChangeイベント」です。
Changeイベントなら、セルの値が変更された際に自動的にマクロが実行され、セルの書式設定が変更となります。
また、条件付き書式のパターンと異なり、一度設定してしまえば複数年分を対応することが可能です。
ちなみに、VBAを設定するにあたり、事前にリボンの「開発」タブを表示させておく必要がありますので、非表示の方は以下の記事をご参照くださいね。
VBAをはじめる前の環境準備!リボンの「開発」タブの表示方法
では、対応方法は以下のとおりです。
【STEP1】VBE(Visual Basic Editor)を表示
まず、リボン「開発」タブ(①)にある「Visual Basic」をクリック(②)します。
【STEP2】対象シートへChangeイベントを挿入
次に、VBE(Visual Basic Editor)が表示されますので、VBAを設定したいシートをダブルクリック(③)し、コードの入力画面(コードウィンドウ)を表示させます。
そして、コードウィンドウ上部の左側のプルダウン(オブジェクトボックス)は「Worksheet」を選択(④)し、右側のプルダウン(プロシージャボックス)は「Change」を選択(⑤)しましょう。
【STEP3】Changeイベント発生時の処理内容を記述
“Private~”と”End Sub”の間の行へコードを追加(⑥)すればOKです。
なお、ここで入力するコードのサンプルは以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Private Sub Worksheet_Change(ByVal Target As Range) Dim Reiwa As String, MyGen As Long If Target.Column = 1 And Target.Row >= 2 Then 'A列の2行目以下のセルの値が表示形式の変更対象 On Error Resume Next MyGen = Year(Target) - 2018 '令和の場合の元を取得 Reiwa = """令和" & MyGen & "年""" & "m""月""d""日""" '令和の表示形式 If Target >= 43586 Then '2019/5/1のシリアル値「43586」以上か否かで条件分岐 Target.NumberFormatLocal = Reiwa 'TRUEの場合、変数Reiwaの表示形式 Else Target.NumberFormatLocal = "ggge""年""m""月""d""日""" 'FALSEの場合、"ggge年m月d日"の表示形式 End If End If End Sub |
3行目
3 | Dim Reiwa As String, MyGen As Long |
変数「Reiwa」と変数「MyGen」を定義しています。
変数「Reiwa」は、令和の年ごとのセルの表示形式を設定するためのものです。
また、変数「MyGen」は、令和の元(何年目か)を取得するためのものとなります。
5行目
5 | If Target.Column = 1 And Target.Row >= 2 Then |
セルの値が変更された際に自動的にマクロが実行される範囲(変数「Target」)を設定しています。
今回は、A列の2行目以降のセルを対象範囲にするために、以下の2つの条件をAND条件としました。
- 「Column = 1」でA列のみを指定
- 「Row >= 2」で2行目以降を指定
7行目
7 | On Error Resume Next |
変数「Target」へ誤って日付以外の形式(文字列など)が入力された場合でもエラーにならないように「On Error Resume Next」を設定しています。
9行目
9 | MyGen = Year(Target) - 2018 |
変数「MyGen」の値として、変数「Target」に該当するセルの値の西暦から“2018”を減算したものを設定します。
たとえば、変数「Target」のセルの値が”2019/5/1”であれば、西暦は”2019”になるので、それから”2018”を減算した結果の”1”が変数「MyGen」の値となりますね。
10行目
10 | Reiwa = """令和" & MyGen & "年""" & "m""月""d""日""" |
変数「Reiwa」の表示形式を設定します。
変数「Target」のセルの値に応じて令和の元が変更になる部分を変数「MyGen」を組み合わせることで可変にしてみました。
たとえば、変数「MyGen」の値が”1”の場合、変数「Reiwa」には、文字列は「”令和1年”m”月”d”日”」がセットされます。
なお、コード上にダブルクォーテーション[”]が多いのは、VBAのルール上、Excelの表示形式中にダブルクォーテーション[”]を表示させるため、通常よりも1つずつ多くのダブルクォーテーション[”]が必要です。
12~16行目
12 13 14 15 16 | If Target >= 43586 Then '2019/5/1のシリアル値「43586」以上か否かで条件分岐 Target.NumberFormatLocal = Reiwa 'TRUEの場合、変数Reiwaの表示形式 Else Target.NumberFormatLocal = "ggge""年""m""月""d""日""" 'FALSEの場合、"ggge年m月d日"の表示形式 End If |
IFステートメントで表示形式を条件分岐させています。
条件は、変数「Target」のセルの値が、令和の開始日”2019/5/1”のシリアル値となる”43586”以上か否かです。
TRUE(”43586”以上)の場合、セルの表示形式は変数「Reiwa」にセットされた内容が適用されます。
たとえば、変数「Target」のセルの値が、”2019/5/1”なら「”令和1年”m”月”d”日”」ですね。
そして、FALSE(”43586”より小さい)の場合、セルの表示形式は「”ggge年m月d日”」が適用されます。
こちらは、Excelに標準で用意されている和暦表記の表示形式です。(「平成◯年◯月◯日」の形式)
VBAでChangeイベントを設定した結果
A列の2行目以下のセルの値を更新するたびに、自動的にセルの書式設定が変わります。
【ケース2】すでに入力された日付を参照した別セルの値を「令和」表示にしたい
ケース2は、上図のように、すでに入力された日付を参照した別セルの値を和暦表示にしたい場合を指します。
このケースでは、関数を応用すれば実現可能です。
【ケース2-1】IF関数+TEXT関数+YEAR関数
今回は、IF関数とTEXT関数とYEAR関数を組み合わせました。
A2セルの値をB2セルの数式で令和表記の文字列にしていきます。
ケース1-2のVBAの考え方と似ていますが、まずはIF関数で令和の開始日”2019/5/1”のシリアル値となる”43586”以上か否かを判定します。(IF関数の引数「論理式」の「A2>=43586」の部分)
TRUE(”43586”以上)の場合
IF関数の引数「値が真の場合」に設定した「”令和”&YEAR(A2)-2018&”年”&TEXT(A2,”m月d日”)」が適用されます。
たとえば、A2セルの値が”2019/5/1”なら、B2セルの値は”令和1年5月1日”と表示されますね。
こちらは、文字列をつなぎ合わせていますが、「年」の部分のみが変動要素のため、YEAR関数でA2セルの西暦を取得し、”2018”を減算しています。(A2セルの値が”2019/5/1”なら、”2019-2018”となり、年数は”1”となる)
「月」と「日」については、TEXT関数でA2セルの値を”m月d日”形式の文字列にしていますね。(A2セルの値が”2019/5/1”なら”5月1日”)
FALSE(”43586”より小さい)の場合
IF関数の引数「値が偽の場合」に設定した「TEXT(A2,”ggge年m月d日”)」が適用されます。
こちらは、TEXT関数でA2セルの値を「”ggge年m月d日”」形式の文字列で表示となりますね。
たとえば、A2セルの値が”2019/4/30”なら、B2セルの値は”平成31年4月30日”となります。
さいごに
いかがでしたでしょうか?
やはり、原則として、新元号に対応したOffice更新プログラムの配布を待つことが一番良いです。
もし、どうしても新元号の「令和」にする必要がある場合のみ、上記のいずれかの方法をお試しいただければと思います。
本記事のサンプルファイルは以下からダウンロードしてください。
サンプルファイル_新元号「令和」対応
※サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります。
(上記リンクから登録フォームへ遷移します)
ご参考になれば幸いですm(_ _)m

元号が変わると時代の節目という感じでテンション上がります!
ただ、正直和暦を使用していると、メンテナンスが大変なので、極力ビジネス上で使わないにこしたことはないですね。。
官公庁などの公的な性質が強い組織や、契約書等の重めな書類は仕方がないかもしれませんが、個人的には、なるべく西暦メインになると混乱しなくて済むのになーと思っています。