エクセルで和暦(昭和・平成・令和)を西暦に一発変換する

w-y 作成事例
スポンサーリンク

和暦から西暦または西暦から和暦に変換する事なんてソフトやアプリケーションでできるのに、なんでわざわざエクセルでやる必要があるの?って思いませんでしたか

ある程度の規模のある会社ならなぜ?ですが、小さな会社などではエクセルで住所録や顧客管理するしかないですよね、お金がないので。

ところが、意外とめんどくさいのでクリック1回で一瞬で変換出来たら仕事が早くなり効率的になりますよね。

とりっぷぼうる
とりっぷぼうる

ユーザーフォームを使って簡単変換フォームを作っちゃいました。

ここに記載したVBAコードはコピペして自由に使ってもらっても構いませんよ。

スポンサーリンク

和暦から西暦変換フォームをつくろう

変換フォームをつくるのに見栄えやレイアウトを考えなければ、30分もかからずに出来上がりましたので、作成手順を紹介します。

ワークシートでの準備

まず大前提になるのが、使う人の操作は全てこの後につくるユーザーフォームで入力操作をしますので、ワークシートには最低限の準備だけになります。

和暦変換ワークシート
エクセルワークシートでの準備はたったのこれだけ

上記エクセルワークシートの画像ですが、エクセル関数・数式が入っているのは2か所だけです。

  • セルB2は令和と2をくっつけて(結合)表示させる
  • セルA2は令和2年をR2.1.1(令和2年1月1日)と表示させる

セルB2の結合について

ユーザーフォームを使って和暦と年を選ぶと、和暦はセルC2へ年はセルD2へ転記されるようにすることにより、和暦(令和)と年(2)がバラバラになっているのを結合により「令和2年」とひとまとめにします。

セルを結合するエクセル数式

=C2&D2&D1

あれ?3つ?、2つじゃないの?って思いませんか?

実は「令和」「2」だけじゃエラーになるので「年」を加えて「令和2年」とします。

セルA2の日付表示設定について

次にセルB2に表示させた「令和2年」のままでは、西暦に自動変換はできませんでしたので、エラーの原因は日付が無かったためでした。

そこで、セルA2には3つの作業を設定しています。

  1. セルB2の「令和2年」に1月1日を付け加える
  2. 文字列を日付の数値に変換する(DATEVALUE関数)
  3. セルの書式設定で西暦に変換できるようにする

ではまず始めに、1月1日を付け加える方法ですが、先ほども使用した「&」を使うだけです。

令和2年と1月1日をくっつける数式

=B2&”1月1日”

全く難しくないですよね、次にDATEVALUE関数を付け加えます。

DATEVALUE関数

=DATEVALUE(B2&”1月1日”)

式は完成したのですが、書式設定をしないとエラーのままで、西暦にも変換できないので必ず書式設定をします。

セルの書式設定
とりっぷぼうる
とりっぷぼうる

これでエクセルワークシートの設定は終わりです。

次にユーザーフォームを作りましょう。

入力フォームをつくる

ユーザーフォームに和暦をオプションボタンから選択してテキストボックスに「年」を入力して、変換ボタン(コマンドボタン)を押せば西暦が表示されるようなオリジナル変換フォームを作ります。

w-y

入力フォームを作る手順としては、下記のように勧めれば簡単にできますよ。

  1. 新規ユーザーフォームを挿入する
  2. ツールボックスから各コントロールを配置する
  3. プロパティで書式設定をして見た目・レイアウトを整える
  4. コマンドボタンにVBAコードを記述する

新規ユーザーフォームを挿入する

まずは、Visual Basic Editor(VBE)を起動して、作業ができるように画面を切り替えますが、初めての方には全くわからないと思いますし、エクセルにそんな画面あった??ってなりますよね。

とりっぷぼうる
とりっぷぼうる

Visual Basic Editor(VBE)の起動方法やユーザーフォームについての詳細はこちらをご覧くださいませ。

これが何なのかわかっている方には当たり前の事で見慣れた画面なので説明は省略します。

ツールボックスから各コントロールを配置・書式設定など

ここで使用しているコントロールは、Frame・OptionButton・TextBox・Label・CommandButtonです。

Frame(フレーム)の配置

フレーム自体に特別な設定や役目は特に感じていませんが、見た目がスッキリまとまるので使うことがよくあります。

もちろんなくても大丈夫ですよ!という事で「Frame1」の名前(Caption)だけを「和暦入力」と書き換えました。

OptionButton(オプションボタン)の配置

和暦(昭和・平成・令和)のうちどれか1つを選べるようにするために3つ配置し、「OptionButton1」の名前(Caption)を「昭和」に 「OptionButton2」の名前(Caption)を「平成」 に「OptionButton3」の名前(Caption)を「令和」 に変更しました。

TextBox(テキストボックス)の配置

「年」を直接入力するために配置し、プロパティで書き3点を設定しました。

  1. 入力文字は「半角英数」に指定(IMEmodeをAlpha)
  2. 文字の表示位置は「中央寄せ」に指定(TextAlignをcenter)
  3. 文字サイズを18pxに指定(Font)

CommandButton(コマンドボタン)の配置

このボタンを1回押すことにより、和暦を西暦に変換してこの次に説明するラベルに西暦を表示させるようにVBAコードを記述します。

VBAコードを書く前に、「CommandButton1」の名前を「西暦変換」に変更しました。

Label(ラベル)の配置

ラベルは3つ配置していて、「Label1」はテキストボックスの右側の「年」の文字に、「Label2」は西暦が表示されるように「19xx」と名前を書き換え、「Label3」はこの「19xx」の右側に「年」と書き換えて配置しました。

「Label2」だけ装飾ではなく実際に西暦に書き換わるようになります。

あとは、全体のバランスを見ながらお好みの文字フォントや大きさや色なども変えながらレイアウトしてみてはいかがでしょうか?

スポンサーリンク

VBAコードを記述する

ユーザーフォームの準備ができたところで、コマンドボタンに和暦から西暦に変換するVBAコードを記述しましょう。

登録方法はコマンドボタンをクリックすればVBAコードを記述できる画面になります。

VBAコードを記述する手順は下記の通りです。

  1. 各オプションボタンに和暦・処理内容を登録
  2. テキストボックスに入力された年(数字)を処理する内容を登録
  3. 変換された年(西暦)を19xx部分に表示させる内容を登録

オプションボタンの処理

各オプションボタンのどれが選択されたかによって選ばれた和暦をセルC2に記載させます。

VBAコード

Private Sub CommandButton1_Click()
If OptionButton1.Value = True Then
Range(“C2”).Value = “昭和”
ElseIf OptionButton2.Value = True Then
Range(“C2”).Value = “平成”
ElseIf OptionButton3.Value = True Then
Range(“C2”).Value = “令和”
End If
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. もしオプションボタン1が選択されていたら
  3. セルC2に「昭和」を記載する
  4. そうではなく、もしオプションボタン2が選択されていたら
  5. セルC2に「平成」を記載する
  6. そうではなく、もしオプションボタン3が選択されていたら
  7. セルC2に「令和」を記載する
  8. Ifステートメント終了
  9. マクロ終了

これで、どの和暦(昭和・平成・令和)が選択されたかによって、セルC2に選ばれた和暦が記載されるようになりました。

次に、何年かの「年」をセルD2に記載されるように上記VBAコードに付け足します。

「年」を追加するVBAコード

Range(“D2”).Value = TextBox1.Text

解説
  • セルD2にテキストボックスに入力された数字を記載する

最後にエクセル関数で計算されているセルA2に記載された日付を西暦の年だけ取り出して、ラベル2に表示さるVBAコードを追加します。

西暦をラベルに表示させるVBAコード

UserForm1.Label2.Caption = Format(Range(“A2”).Value, “YYYY”)

解説
  • ユーザーフォーム1に配置されたラベル2の名前は、セルA2の値の日付から年を取り出して表示させる

このようになり、全てつなぎ合わせた完成したVBAコードがこれです。

和暦を西暦に変換するVBAコード

Private Sub CommandButton1_Click()
If OptionButton1.Value = True Then
Range(“C2”).Value = “昭和”
ElseIf OptionButton2.Value = True Then
Range(“C2”).Value = “平成”
ElseIf OptionButton3.Value = True Then
Range(“C2”).Value = “令和”
End If
Range(“D2”).Value = TextBox1.Text
UserForm1.Label2.Caption = Format(Range(“A2”).Value, “YYYY”)
End Sub

VBAコードは上から順番に処理を行うので、最後に追加したVBAコードを最初に書いてしまうとエラーになりますよ。

スポンサーリンク

作成したフォームを表示させる

出来上がったユーザーフォームはそのままでは使えませんので、フォームを呼びだす必要があります。

  1. ワークシート上にコマンドボタンを配置して押して呼び出す
  2. エクセルを開くと自動的にフォームが呼び出される

コマンドボタンを配置する

エクセルワークシート上リボンの「開発」→「挿入」→「フォームコントロール」でコマンドボタンを選択して、ワークシート上に配置します。

とりっぷぼうる
とりっぷぼうる

通常はリボンには「開発」は表示されていないので、追加する必要があり、方法は下記を参照ください

追加ができたら、ボタンにユーザーフォームを呼び出すVBAコードを記述します。

エクセルを開くと自動表示させる

この方法でユーザーフォームを呼び出すことが私自身はほとんどで、自動表示の方がわずかですがクリックする手間が省けますからね。