カレンダー型日付入力フォーム

ラボ

簡単に導入できるカレンダー型日付入力フォーム

簡単に導入出来て使い勝手の良いカレンダーフォームです。
ダウンロードして、すぐにお手持ちの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の範囲をダブルクリックした時にカレンダーフォームを出し、そのセルに値を入力する例

コメント

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