
VBAで日付を自動取得してユーザーフォームに表示する

今日の日付って様々な場面で使用しませんか?
エクセルでは、TODAY関数を使ってセルに入力しておいてユーザーフォーム表示させる方法と、VBA関数のDate関数を使用してユーザーフォーム表示させる方法があります。

使用しているパソコンの設定から現在の日付・時刻を取得しますので、パソコン自体の設定が誤っていたら、当然ながら誤取得しますよ。
また、VBAでパソコン自体の日付・時刻設定変更はできませんので、パソコン右下の時計をクリックして設定して下さいね。
今日の日付を取得する
TODAY関数(エクセル関数)
エクセル関数のひとつで今日の日付を取得することができる関数で、セル自体に書式設定をしていない初期状態は「標準」になっているので、2020/1/31と表示されます。
また、セルの書式設定で「数値」を選択するとシリアル値での表示になり、1900年1月1日を「1」として通算何日目かを表示するので、43861と表示されます。
=TODAY()
この式を日付表示したいセルに書くだけで完成です。
Date関数(VBA関数)
VBAコードで日付を取得するにはDate関数を使う事で、ワークシートのセルにかかわることなく今日の日付を取得できるようになります。
また、Date関数で取得した日付をセルに転記してから再度取得することももちろんできます。
Sub 日付()
MsgBox Date
End Sub
- 「日付」というマクロ記述開始
- メッセージで今日の日付を表示する
- マクロ終了
たったのこれだけを「挿入」から「標準モジュール」をクリックして追加した後に、VBAコードを記述するだけですよ。
それでは次に、ユーザーフォームに配置したラベルに今日の日付を表示させますが、エクセルを開いた時に自動的にユーザーフォームを表示させて日付表示させるVBAコードを記述してみましょう。
Private Sub Workbook_Open()
UserForm1.Label1.Caption = Date
UserForm1.Show
End Sub
- エクセルを開いたら
- ユーザーフォーム1に配置したラベル1のテキストを今日の日付にする
- ユーザーフォーム1を表示する
- マクロ終了
今度は、VBAコードを書く場所を変えたので、この方法ならばエクセルを開くと自動的にユーザーフォームに今日の日付が表示できるようになります。
上記画像をクリックして表示されたように自動的にエクセルが作業を行ってくれるので楽ですよね。

ここでは、エクセルを開いた瞬間に作業を行ってくれましたが、タイマー機能を使って何秒後にっていう技もありますが、ここでは省略しますので興味のある方は下記をご覧くださいませ。

次にユーザーフォームを切り替えて、一旦取得した日付をセルA1に転記して再取得してラベル表示させてみましょう。
Private Sub CommandButton1_Click()
Unload UserForm1
Range(“A1”).Value = Date
UserForm2.Label1.Caption = Range(“A1”).Value
UserForm2.Show
End Sub
- コマンドボタン1がクリックされたら
- ユーザーフォーム1を閉じる
- セルA1に今日の日付を転記する
- ユーザーフォーム2に配置されたラベル名をセルA1の値を取得する
- ユーザーフォーム2を表示する
- マクロ終了
このようにすればちょっとめんどくさい作業をしていますが、クリック1回で一瞬で完了します。