【Excel】更新プログラム未対応で令和表示にする

Excelで令和表記
この記事は約8分で読めます。

マイクロソフトはWindowsおよびOfficeの更新プログラムによって新元号に対応しました。

この更新プログラムを適用すればExcelでも新元号である令和での表記が可能になります。

日付を和暦で表記するにはセルの書式設定の表示形式で
[$-ja-jp]ggge”年”m”月”d”日”を指定します。

ここでは何らかの理由によって更新プログラムを適用できない環境でも和暦の令和表記に対応し、1クリックで和暦と西暦を切り替えられるマクロを紹介します。

更新プログラムを適用した環境で「令和1年」を「令和元年」表記に切り替える方法は以下の記事で紹介しています。

マクロを作成したことがない人でも、この記事のプログラムをコピーして貼り付けるだけで使えるようになります。

解説部分は理解できなければ読み飛ばしても構いませんので、紹介動画をみてから記事の最後の「マクロ未経験者への手引き」を参考にしてみてください。

マクロの紹介動画

今回のマクロを実際に動かしているところを動画にしました。

【Excel】更新プログラム未対応でも令和表記に対応するマクロ

クイックアクセスツールバーからマクロを実行することで1クリックで和暦(令和対応)と西暦を切り替えている様子が確認できます。

和暦に変換するマクロのプログラム

日付データを令和対応した和暦表記の文字列に変換するマクロです。

マクロ名「ReiwaStr」です。

'日付データを和暦文字列に変換
Sub ReiwaStr()
    Dim rng As Object      'Rangeオブジェクト変数
    For Each rng In Selection
        If IsDate(rng) = True Then      'セルの値が日付変換可能な場合のみ実施
            Select Case CDate(rng.Value)
                '2019/5/1から12/31は令和元年と表記
                Case 43586 To 43830
                    rng.Value = "令和元年" & Format(rng, "m月d日")
                '2020/1/1以降は令和〇年で表記
                Case Is >= 43831
                    rng.Value = "令和" & Format(rng, "yyyy") - 2018 & "年" & Format(rng, "m月d日")
                '2019/4/30以前はそのまま和暦表記を文字列変換
                Case Else
                    rng.Value = Format(rng, "ggge年m月d日")
            End Select
        End If
        DoEvents
    Next
End Sub

プログラムの解説

まず、For Each ~ In ステートメントを用いて選択セル範囲(Selection)を1つずつ変数 rng に格納します。

IfステートメントとIsDate関数を使ってセルの値が日付データに対応している場合のみ、以降のプログラムを実行します。

Select Case ステートメントによって次の条件でセルの値を表示させます。

  • 2019/5/1~2019/12/31は、令和元年m月d日
  • 2020/1/1以降は、令和〇年m月d日
  • それ以外(2019/4/30以前)は、ggge年m月d日

セルの値はFormat関数で表示形式を指定した文字列にしています。

ggge年の”ggg“は和暦の元号を漢字二文字で表示します。(例:平成、昭和・・・)

e“は和暦の年数です。

ちなみに”ggg“のところを”gg“とすると元号を漢字一文字(例:平、昭・・・)、”g“とすると元号のアルファベット頭文字(例:H、S・・・)になります。

条件にある”43586“等の数字は日付のシリアル値です。

セルの選択範囲が多かった場合にExcelが応答しなくなるのを防ぐために、毎回DoEvents関数でOSに制御を戻します。

西暦に戻すマクロのプログラム

和暦変換した文字列を西暦表記の日付データに戻すマクロです。

マクロ名「reAD」です。

'令和対応和暦文字列を西暦に戻す
Sub reAD()
    Dim rng As Object            'Rangeオブジェクト変数
    Dim buf As String             '一時的に文字列を格納する変数
    Dim yearStr As String       '文字列の年数を格納する変数
    For Each rng In Selection
        If IsDate(rng.Value) = True Then    '日付変換可能な場合は変換し表示形式で西暦に
            rng.Value = CDate(rng.Value)
            rng.NumberFormatLocal = "yyyy/m/d"
        ElseIf InStr(rng.Value, "令和") > 0 And InStr(rng.Value, "年") > 0 Then
            buf = Replace(rng.Value, "令和", "")
            yearStr = Left(buf, InStr(buf, "年") - 1)
            buf = Replace(buf, yearStr & "年", "年")
            '令和年数を西暦年数に変換
            If yearStr = "元" Then
                yearStr = "2019"
            Else
                yearStr = yearStr + 2018
            End If
            buf = yearStr & buf
            If IsDate(buf) = True Then      '西暦年数に変換後、日付形式に対応可能か判定
                rng.Value = CDate(buf)
                rng.NumberFormatLocal = "yyyy/m/d"
            End If
        End If
        DoEvents
    Next
End Sub

プログラムの解説

和暦変換プログラムとの違いとして、ここではセルの書式をNumberFormatLocalプロパティで日付表示形式に設定しています。

こうすることでセルの値を日付データとして扱うことができるようになります。

また、IfステートメントとInstr関数を使ってセルの値に”令和“や”“の文字が含まれるかどうかを判定しています。

このマクロの注意事項

令和の1年目の表記は”令和元年“になります。

このマクロで変換した和暦表示のセルの値は、日付データではなく文字列になります。

そのため和暦表示の状態での日付計算はできません。

西暦に戻したセルは日付データになるため、日付計算もできます。

マクロの保存方法

マクロを保存する方法はこちらの記事を参考にしてください。

マクロの実行方法

今回のようなマクロはクイックアクセスツールバーから実行すると便利です。

特定のブックでのみ使用する場合は適用範囲を「(作業中のブック名)に適用」とします。複数のブックで使用する場合は「すべてのドキュメントに適用」にします。

クイックアクセスツールバーから実行する方法はこちらの記事を参考にしてください。

そのほかの方法も含めてマクロを実行する方法についてはこちらの記事も参考にしてください。

マクロ未経験者への手引き

冒頭の紹介動画の後半に、マクロ未経験者がこのマクロを使えるようにするための手順を紹介しています。

次のような手順になります。

  1. Excelを起動する
  2. 表示」タブ(「開発」タブでも同じです)のマクロの記録を実施。
  3. (なにもせずに)記録終了をクリック
  4. ショートカットキー Alt + F11 を押す
  5. VBAProject(PERSONAL.XLAB)標準モジュールModule1をダブルクリック
  6. マクロの記録で作成された不要なコードを削除
  7. この記事のマクロ名「ReiwaStr」のコードをコピーして貼り付け
  8. 続けてその下の行にマクロ名「reAD」のコードをコピーして貼り付け
  9. 上書き保存をクリック
  10. クイックアクセスツールバーのユーザー設定から「その他のコマンド」を選択
  11. コマンドの選択で「マクロ」を選択
  12. PERSONAL.XLSB!ReiwaStrPERSONAL.XLSB!reAD を追加
  13. 変更」ボタンを押してアイコンを設定(お好みのアイコンを設定してください)
  14. OK」をクリック

以上です。最初に起動したExcel(‘Book1)は保存せずに閉じても構いません。

これで同じコンピュータ上のすべてのExcelブックでマクロが使用可能になります。

不明な点などありましたらコメントまたはお問い合わせフォームから質問してください。

コメント

  1. ようく より:

    こんにちは。
    マクロ素人のようくです。コメント失礼します。

    表示を『令和元年11月2日(土) → 2019/11/2(土)』と曜日入りにしたく、
    私なりに下記のように試してみましたが、西暦から和暦には変換できるのですが、和暦から西暦には変換できません。
    お手数をお掛け致しますが、ご教示いただけると幸いです。
    よろしくお願いいたします。

    ‘日付データを和暦文字列に変換
    Sub ReiwaStr()
    Dim rng As Object ‘Rangeオブジェクト変数
    For Each rng In Selection
    If IsDate(rng) = True Then ‘セルの値が日付変換可能な場合のみ実施
    Select Case CDate(rng.Value)
    ‘2019/5/1から12/31は令和元年と表記
    Case 43586 To 43830
    rng.Value = “令和元年” & Format(rng, “m月d日(aaa)”)
    ‘2020/1/1以降は令和〇年で表記
    Case Is >= 43831
    rng.Value = “令和” & Format(rng, “yyyy”) – 2018 & “年” & Format(rng, “m月d日(aaa)”)
    ‘2019/4/30以前はそのまま和暦表記を文字列変換
    Case Else
    rng.Value = Format(rng, “ggge年m月d日(aaa)”)
    End Select
    End If
    DoEvents
    Next
    End Sub
    ‘令和対応和暦文字列を西暦に戻す
    Sub reAD()
    Dim rng As Object ‘Rangeオブジェクト変数
    Dim buf As String ‘一時的に文字列を格納する変数
    Dim yearStr As String ‘文字列の年数を格納する変数
    For Each rng In Selection
    If IsDate(rng.Value) = True Then ‘日付変換可能な場合は変換し表示形式で西暦に
    rng.Value = CDate(rng.Value)
    rng.NumberFormatLocal = “yyyy/m/d/(aaa)”
    ElseIf InStr(rng.Value, “令和”) > 0 And InStr(rng.Value, “年”) > 0 Then
    buf = Replace(rng.Value, “令和”, “”)
    yearStr = Left(buf, InStr(buf, “年”) – 1)
    buf = Replace(buf, yearStr & “年”, “年”)
    ‘令和年数を西暦年数に変換
    If yearStr = “元” Then
    yearStr = “2019”
    Else
    yearStr = yearStr + 2018
    End If
    buf = yearStr & buf
    If IsDate(buf) = True Then ‘西暦年数に変換後、日付形式に対応可能か判定
    rng.Value = CDate(buf)
    rng.NumberFormatLocal = “yyyy/m/d/(aaa)”
    End If
    End If
    DoEvents
    Next
    End Sub

    • PAC.Laboratory PAC.Laboratory より:

      ようく様
      コメントありがとうございます。

      曜日を追加したことで日付形式に変換可能かどうかの判定が False、つまり変換不可能と判定されてしまうため不都合がでているようです。

      マクロ名「reAD」の4行目
      For Each rng In Selection

      の下の行に次の文を追加してみてください。
      rng.Value = Replace(rng.Value, Right(rng.Value, 3), “”)

      これにより一旦曜日を削除してから命令コードが進むようになります。

      一度ご確認ください。

      • ようく より:

        こんにちは。
        解決致しました。
        ありがとうございます。
        今後もいろいろ勉強させていただきたいと思いますので、よろしくお願い致します。

        • PAC.Laboratory PAC.Laboratory より:

          ようく様

          解決できたようでよかったです。
          また不都合な点等ありましたらお気軽に問い合わせください。
          今後ともよろしくお願い申し上げます。

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