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

日付VBA関数 日付・時刻

今日の日付って様々な場面で使用しませんか

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

とりっぷぼうる
とりっぷぼうる

使用しているパソコンの設定から現在の日付・時刻を取得しますので、パソコン自体の設定が誤っていたら、当然ながら誤取得しますよ。

また、VBAでパソコン自体の日付・時刻設定変更はできませんので、パソコン右下の時計をクリックして設定して下さいね。

スポンサーリンク

今日の日付を取得する

TODAY関数(エクセル関数)

エクセル関数のひとつで今日の日付を取得することができる関数で、セル自体に書式設定をしていない初期状態は「標準」になっているので、2020/1/31と表示されます。

また、セルの書式設定で「数値」を選択するとシリアル値での表示になり、1900年1月1日を「1」として通算何日目かを表示するので、43861と表示されます。

TODAY関数で今日の日付を取得する

=TODAY()

この式を日付表示したいセルに書くだけで完成です。

Date関数(VBA関数)

VBAコードで日付を取得するにはDate関数を使う事で、ワークシートのセルにかかわることなく今日の日付を取得できるようになります。

また、Date関数で取得した日付をセルに転記してから再度取得することももちろんできます。

ダイアログボックスに表示するVBAコード

Sub 日付()
MsgBox Date
End Sub

解説
  1. 「日付」というマクロ記述開始
  2. メッセージで今日の日付を表示する
  3. マクロ終了

たったのこれだけを「挿入」から「標準モジュール」をクリックして追加した後に、VBAコードを記述するだけですよ。

VBA関数Date
画像クリックでダイアログボックスで実際の表示に変わります

それでは次に、ユーザーフォームに配置したラベルに今日の日付を表示させますが、エクセルを開いた時に自動的にユーザーフォームを表示させて日付表示させるVBAコードを記述してみましょう。

エクセル開くと日付表示するユーザーフォームのVBAコード

Private Sub Workbook_Open()
UserForm1.Label1.Caption = Date
UserForm1.Show
End Sub

解説
  1. エクセルを開いたら
  2. ユーザーフォーム1に配置したラベル1のテキストを今日の日付にする
  3. ユーザーフォーム1を表示する
  4. マクロ終了

今度は、VBAコードを書く場所を変えたので、この方法ならばエクセルを開くと自動的にユーザーフォームに今日の日付が表示できるようになります。

VBA関数Dateで自動表示
画像クリックで実際のユーザーフォームの表示に変わります

上記画像をクリックして表示されたように自動的にエクセルが作業を行ってくれるので楽ですよね。

とりっぷぼうる
とりっぷぼうる

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

次にユーザーフォームを切り替えて、一旦取得した日付をセルA1に転記して再取得してラベル表示させてみましょう。

フォーム切替とセルへの転記と再取得するVBAコード

Private Sub CommandButton1_Click()
Unload UserForm1
Range(“A1”).Value = Date
UserForm2.Label1.Caption = Range(“A1”).Value
UserForm2.Show
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. ユーザーフォーム1を閉じる
  3. セルA1に今日の日付を転記する
  4. ユーザーフォーム2に配置されたラベル名をセルA1の値を取得する
  5. ユーザーフォーム2を表示する
  6. マクロ終了

このようにすればちょっとめんどくさい作業をしていますが、クリック1回で一瞬で完了します。