簡単に導入できるカレンダー型日付入力フォーム
簡単に導入出来て使い勝手の良いカレンダーフォームです。
ダウンロードして、すぐにお手持ちのExcelVBAプログラムに導入できます。
2023.11.19 カレンダーフォームを開く際に、元のセルの値の月を表示出来るように変更しました。
多数の方にダウンロードしていただき、ありがとうごさいます。 これを励みに今後も使いやすいツールを目指して頑張ります!感謝!
myカレンダーフォームの仕様
シート上に日付入力するためのカレンダーフォームです。
・年と月がテキストボックスになっているので、直接その年月にアクセスできます。
・西暦年の上には和暦も表示されるので、確認しながら入力できます。
・左右のスピンボタンで月を進めたり戻したりすることができます。
- 年と月がテキストボックスになっているので、直接その年月にアクセスできます。
- 西暦年の上には和暦も表示されるので、確認しながら入力できます。
- 右のスピンボタンで月を進めたり戻したりすることができます。
- カレンダーの日付部分をクリックすると値をコピーできます。

導入の仕方
ダウンロードしたファイル(excel_myカレンダーフォーム.xlsm)を開き、導入したいエクセルファイルを2つ同時に開いてください。(ファイルはxlsmで作成保存してください。)

VBEを開き、図のように、fmMyCalendarを導入したいエクセルファイルにドラッグします。

これで、導入するファイルにカレンダーフォームが追加されました。
プログラムコードの書き方
VBEでfmMyCalendarを右クリックし、「コードの表示」を選択します。
冒頭に以下のような使い方がありますので、参考にしてください。
'//////////////////////////////////////////////////////////////////////////
'【使い方】グローバル変数 gbDate を用意しておきます。
'frmMyCalendar.Showの前に gbDate に日付を入れておけばその日付の付きを表示します。
' gbDate に何も無ければ今日の日付の月が表示されます。
' 選んだ日付は gbDate に出力されます。
'
'■標準モジュールにグローバル変数を宣言しておく(ここに日付が入る)
Public gbDate As Variant ’Variant型で宣言しないとエラーとなる
'■標準モジュールでの使用例
Sub test()
If IsDate(Range("B2")) Then
gbDate = Range("B2") 'セルにあった元の値を指定 ①
Else
gbDate = Date 'gbDateに値が無ければ今日を指定
End If
frmMyCalendar.Show vbModal 'カレンダーフォームを表示 ②
If gbDate <> "" Then
Range("B2") = gbDate '選んだ値をセット ③
End If
End Sub
'//////////////////////////////////////////////////////////////////////////
まず、 gbDate というグローバル変数を宣言します。
この変数が値の受け渡し役となります。
表記のように、Variant型で宣言しないとエラーとなりますので注意してください。
カレンダーフォームを呼び出す前に gbDate に日付を入れて呼び出すと、その月を表示させます。①
frmMyCalendar.Show vbModal でカレンダーフォームを呼び出します。②
フォーム上で 日付がクリックされると、 gbDate に値が返ってくるので、セルに値を代入します。③
値は日付型なので、表示形式を変えたい場合は、セルの表示形式を変えるか、Format関数を使用してください。
使い方のサンプル
excel_myカレンダーフォーム.xlsmでは、以下の2つのサンプルが入っていますので、使い方の参考にしてください。
- Module1に、ボタンを押してカレンダーフォームを出して値を入力する例
- SheetのA5~A10の範囲をダブルクリックした時にカレンダーフォームを出し、そのセルに値を入力する例
コメント