
現在の日付を和暦に変換してコンボボックスにリスト化する

生年月日など入力する時に、インターネットなどでよく見るリストからリストから選択する方法をエクセルでもできますが、こんなことで悩みませんでしたか?
西暦を書くように記入用紙に案内しているのに、なぜか平成や昭和などの和暦で書いてしまう人がいて西暦に直すのが面倒だった経験ありませんか?
そもそも西暦管理されていなくて和暦管理しているので、リストが西暦ではなく和暦表示にしたいのに、VBAでFomatやTextを使ってもうまくいかなくて困っていませんか?
どうやらVBAコードを書く順番があるようでこのようにVBAコードを書くとコンボボックスに和暦リストが新しい順に表示できますよ。

Private Sub UserForm_Initialize()
For i = -1 To 121
Me.ComboBox1.AddItem Format(DateAdd(“yyyy”, -i, Date), “ggge年”)
Next i
ComboBox1.ListIndex = 1
End Sub
これだけなので、詳しく説明します。
和暦(令和・平成・昭和など)をリスト化する
コンボボックスのプロパティでもできるけど

コンボボックスを始めて使う時などリスト表示させる項目を取得するのに、プロパティのRowSourceに項目追加したいセルを入力します。
和暦(令和・平成・昭和・大正・明治)を入力すると昭和20年から現在の令和3年までとしても、70行以上もセルに入力作業が必要で、来年以降は毎年毎回セルに入力しなくてはいけません。
そしてRowSourceもその度に変更が必要になるので面倒ですし、今調べていてコンボボックスのプロパティで和暦リストを作るを探していたわけではないと思うので、AddItemを使ってVBAコードで項目設定をします。
AddItemを使って初期項目を準備
コンボボックスの初期項目をRowSourceを使った時の面倒を解消するには、AddItemメソッドを使ってユーザーフォームが開いた時に自動的にリスト化します。
ここでは令和4年~平成28年の7年分をAddItemを使ってコンボボックスの項目を設定します。
Private Sub UserForm_Initialize()
With ComboBox1
.AddItem “令和4年”
.AddItem “令和3年”
.AddItem “令和2年”
.AddItem “令和元年”
.AddItem “平成31年”
.AddItem “平成30年”
.AddItem “平成29年”
.AddItem “平成28年”
End With
End Sub
これでユーザーフォームが表示された時に、コンボボックスに令和4年~平成28年の7年分がリスト化されて選択できるようになります。
これにより、令和5年になった時には.AddItem “令和5年”を付け加えるだけなので、プロパティのRowSourceを使った時よりはセルの入力作業が必要ない分面倒が減りますが、生年月日で使おうとすれば、昭和元年ぐらいからは必要なので足りません。
そうすると100行も書き続けるのはとても面倒なので、項目が多い時は実用的ではありませんから繰り返し処理ができるFor~Nextを使いましょう。
ユーザーフォームが開いた時に自動的にリスト化させるInitializeの使い方・繰り返し処理のFor~Nextについては、ここでは省略します。


For~Nextで繰り返し処理してAddItem登録する
基本的に繰り返し処理をする変数は、指定しない限り文字でも数字でも構いませんので、ここでは変数の名前を「i」とします。
そして誕生日を登録する場合としたら、100歳ぐらいとしてリスト化させるとしたら100年前の明治33年から現在ということになるので、変数「i」を-100 To 1とすればリストは100年前から来年となります。
そして現在の日付を取得するYear(Date)+1を加えれば、西暦で1921年~2022年が古い順にコンボボックスにリスト化されます。

個人的に右の新しい順のリストの方が使いやすいので、変数を100年前から現在となっているのを来年から100年前にして「+i」だと数字が増えたので「-i」に変更したら下記のようになります。
Private Sub UserForm_Initialize()
For i = -1 To 121
Me.ComboBox1.AddItem Year(Date) – i
Next i
End Sub
西暦を和暦に書式変更する
この方法で現在の日付から西暦でリスト化できているので、あとは表示を和暦にするだけです。
現在の日付から「年」を和暦にする
西暦の「年」を和暦にするにはセルの書式設定でも使われているggge年とすれば、和暦に表示変更でき、Formatを使えば西暦を和暦表示完成します。
Private Sub UserForm_Initialize()
Me.ComboBox1.AddItem Format((Date), “ggge年”)
End Sub
これで現在の日付から和暦の年数だけ取り出してリストボックスに表示させられ、令和3年とリストに表示されます。
これと、最初の西暦のリスト化されたVBAコードを組み合わせれば、コンボボックスに和暦でリスト化が完成したのが、最初にも紹介したこのVBAコードです。
Private Sub UserForm_Initialize()
For i = -1 To 121
Me.ComboBox1.AddItem Format(DateAdd(“yyyy”, -i, Date), “ggge年”)
Next i
ComboBox1.ListIndex = 1
End Sub
ここでは現在の日付に時間計算するDateAdd関数を使って、現在日付からyyyyで年単位で、変数「i」を引いた「年」を和暦にするように修正しています。
このように時間を計算する方法については下記をご覧くださいませ。

そして最後にリストの1番上から1つ目のリスト(上から2番目)を選択状態で表示させています。
あとは、ComboBox1に選択したリストを任意のセルに記載するVBAコードを書けば、コンボボックスに表示された和暦リストから選択した「年」を選ぶことができるようになりました。

このように和暦を現在日付から自動取得できることができたので、ワークシートに準備する手間が省けるようになります。
それでは自作カレンダーフォーム作成ページに戻りましょう。
