エクセル関数を基本として作成し、ユーザーフォームで日付選択ができるようにすることで複雑なマクロが分からなくても、自由にカスタマイズして自分のエクセルに組み込んでみませんか?
住所録など作成する時に、和暦がまだまだ多いので和暦・西暦変換もできるようにしてみました。
エクセル2010以降消えたカレンダー機能
今でも多くの方が使っていると思いますが、エクセル2007までは標準機能としてカレンダーコントロールがありました。
私のデスクトップパソコンはまだエクセル2007で、前のノートパソコンが2010!
ところがエクセル2007でカレンダーコントロール機能を使用して作ったエクセルファイルがエクセル2010では使えなくなってしまいました。
もちろん今使っているエクセル2016でも使えません。
理由は分かりませんが、使えなくなったことは事実。
仕方なく「YYYY/MM/DD」形式で入力をしていましたが、日付入力が少なければいいのですが数が多くなると、カレンダーコントロール機能が欲しくなる。
そこでエクセルでカレンダーを作ってみました。
エクセル関数とVBAを組み合わせてカレンダーを作る
出来上がったカレンダーはエクセルVBAのユーザーフォームで、レイアウト自体は難しいことはなく、日付自体はコマンドボタンを37個配置しただけです。
37個の理由は1日が土曜日の時に31日が月曜になるので、最大数の37個コマンドボタンを配置しました。
では、このユーザーフォームの基本説明です。
2つのテキストボックス「年」と「月」を入力して【表示】ボタンを押すと、指定した月の日付が37個の各コマンドボタンに表示されます。
【前月】ボタンを押すと2018年9月が表示、【翌月】ボタンを押すと2018年11月が表示されます。
使い勝手として、これができれば十分だと思っています。
和暦を西暦に変換対応させる
カレンダーコントロール機能を使っていて不便に思ったのが、住所録登録をしている時に和暦(昭和・平成)で誕生日が記載されていたので、わざわざ西暦にして入力していました。
和暦のままで入力してもいいのですが、誕生日を計算するのがまた面倒で、西暦ならばエクセル関数で自動的に年齢が表示できるので、西暦にしていました。
そこでオリジナルのカレンダーを作るのならば、和暦を西暦に変換する機能も付け加えました。
和暦から西暦に変換する方法は画像のフレーム内(西暦変換)を使います。
一般的には和暦といえば、明治・大正・昭和・平成ですが、明治・大正は使わないので、昭和と平成そして次の元号(予備)2つで、オプションボタン選択方式で作っています。
例えば、昭和40年ならば、「昭和」を選択して、テキストボックスに「40」を入力して【変換】ボタンを押すと、下記画像のようになります。
年のところに「1965」と表示され、自動的に和暦が西暦に変換されました。
あとは「月」を入力して【表示】ボタンを押せば、1965年(昭和40年)の指定した月の日付がカレンダー上に表示されます。
これで和暦でも西暦でもどちらでも簡単に対応できました。
エクセル関数の設定
和暦を西暦に変換するのもVBAで複雑に考えるよりも、エクセル関数で準備しておけば簡単です。
画像は昭和21年(セルF26)で切れていますが、実際はセルF230までの範囲で平成以降も入力できるようにしてあります。
ちなみに昭和64年はセルF69、平成31年はセルF100なので、予備ありすぎかな?
【変換】ボタンを押すと、オプションボタンで選択された和暦がF2へ転記、テキストボックスに入力された「年」がセルG2へ転記され、セルH2に結合された和暦が表示されます。
セルH4で変換された西暦が表示される仕組みです。
セルH2には和暦(セルF2)と年数(セルG2)と年が結合する数式を入れています。
ここでは、昭和と40と年を結合します。
とても単純に結合する数式はセルを「&」でつなぐだけです。
ここで出来上がった「昭和40年」(セルH2)を年表から見つけ出せば和暦を西暦に変換できるのです。
そこで使うのが検索をするVLOOKUP関数でセルH4に入れます。
H2は結合して出来上がった昭和40年(H2)で、表の範囲がF5~G30です。
そして「2」は表の2列目(西暦)を指し、「0」は完全一致です。
こうすることで表の中からH2に表示された和暦を見つけてH4に西暦で表示します。
あとはVBAのユーザーフォームの出番です。
ここではユーザーフォームのオプションボタンを使用します。
VBAの設定
【変換】ボタンには、下記のようなコードが書いてあります。
If OptionButton1.Value = True Then
Range(“F2”).Value = “昭和”
ElseIf OptionButton2.Value = True Then
Range(“F2”).Value = “平成”
ElseIf OptionButton3.Value = True Then
Range(“F2”).Value = “予備1”
ElseIf OptionButton4.Value = True Then
Range(“F2”).Value = “予備2”
End If
Range(“G2”).Value = TextBox3.Text
UserForm1.TextBox1.Text = Range(“H4”).Value
TextBox3.Text = “”
End Sub
VBAコードの説明です。
- コマンドボタン39を押すと
- もしオプションボタン1が選択されていたら
- セルF2の値は昭和と転記する
- そうではなくもしオプションボタン2が選択されていたら
- セルF2の値は平成を転記する
- そうではなくもしオプションボタン3が選択されていたら
- セルF2の値は予備1を転記する
- そうではなくもしオプションボタン4が選択されていたら
- セルF2の値は予備2を転記する
- IFステートメント終了
- セルG2の値はテキストボックス3の入力値を転記する
- ユーザーフォーム1のテキストボックス1の値はセルH4の値を転記する
- テキストボックス3を空欄にする
- マクロ終了
その他3つのボタン【入会日】【誕生日】【祝日設定】などは住所録入力フォームなどで使う為に用意してあります。
【祝日設定】ボタンに関しては、必要性がないのですが一応作ってみたので、2018年10月8日が赤色の祝日に表示されています。
ここまで入力フォーム(ユーザーフォーム)の説明を書きましたが、エクセルVBAの知識が豊富な方は、祝日設定や和暦設定などを含め全てVBA上で作成できそうですが、私の知識ではそこまで出来ないので、基本的な設定はエクセル関数で行っていますので、ちょっとした変更や追加などは簡単にでき、様々なエクセルに付け加えることもできるので個人的には重宝しています。
では、次のページにてオリジナルカレンダーの基本的な部分のエクセル関数での設定を記載していきます。
スポンサーリンク