【VBAマクロ】日付を操作する方法まとめ|取得・変換・計算・形式変更

スポンサードリンク
VBA
過去の自分
過去の自分

マクロでエクセル資料を作っているんだけど、
一行目に作成日(今日の日付)を入れたい…。

今の自分
今の自分

なるほど…。
作成日が入っていると、資料の新鮮さがよくわかっていいですよね。
では今回は、「VBAで本日の日付を取得・表示させる方法」
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。

スポンサードリンク

本日の日付を取得・表示させる方法(VBAマクロ)

「Date」を使います。
まずは実行見本をどうぞ。

実行見本

ひとまず全コードと実行結果をご覧ください。
解説は後ほど行います。

全コード

Sub 本日の日付をA1に書き込み()
    Range("A1").Value = Date
End Sub

実行結果

実行結果

解説

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

プロシージャの作成

Sub 本日の日付をA1に書き込み()

End Sub

プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。

日付の取得・書き込み

    Range("A1").Value = Date

上記コードにて、本日の日付を取得し、「A1セル」に書き込みしています。

Date:本日の日付(年月日)を取得

マクロが完成したら、実行して動作を確認してみましょう。

エクセル内に作成した自作のボタンを押してマクロを実行させることも可能です。
ボタンの作り方は、下記記事でわかりやすく解説しております。

スポンサードリンク

いろいろな日付操作(変換・計算・形式変更など)

前項ではシンプルに本日の日付を書き込みしました。
ここからは、いろいろな方法で日付を操作する方法を紹介いたします。

変数に入った日付を書き込み

取得した日付を変数に格納し、その変数(日付)をセルに書き込みした例です。

Sub 変数に入った日付を書き込み()
    Dim today As Date
    today = Date
    Range("A1").Value = today
End Sub
実行結果

結果は前項と同じです。

変数や宣言(Dim today As Date)については、下記記事でわかりやすく解説しております。
ご参考ください。

さまざまな形式で日付を書き込み

「YYYY/MM/DD(2025/3/16)」形式以外でも日付を表示させることができます。
まずは「YY/MM/DD(25/3/16)」形式で表示した例です。

Y:Year(年)
M:Month(月)
D:Day(日)

Sub 日付の形式1()
    Range("A1").Value = Format(Date, "yy/mm/dd")
End Sub
形式の変更1

Format:日時の形式を指定できる
Date:本日の日付
yy/mm/dd:形式の指定
(本日の日付を「yy/mm/dd」形式で表示)


「/(スラッシュ)」を入れない「YYYYMMDD(20250316)」形式で表示することも可能です。

Sub 日付の形式2()
    Range("A1").Value = Format(Date, "yyyymmdd")
End Sub
形式の変更2

「月日」だけを表示することもできます。

Sub 日付の形式3()
    Range("A1").Value = Format(Date, "'mmdd")
End Sub
形式の変更3

頭に「’(クォーテーション)」をつけないと、「316」になってしまうため注意してください。

日付の計算

本日の日付を基準に、○日後の日付を表示させることができます。
今回は一週間後の日付を表示させた場合をお見せします。

Sub 一週間後の日付を書き込み()
    Range("B1").Value = Date
    Range("B2").Value = DateAdd("d", 7, Date)
End Sub
日付の計算1

DateAdd:特定の日の前後を計算
d:日(day)
7:7日後
Date:本日の日付
(本日の日付から7日後が表示されます)


1ヶ月後の日付も表示できます。
「d(日)」ではなく「m(月)」を記述してください。

Sub 一ヶ月後の日付を書き込み()
    Range("B1").Value = Date
    Range("B2").Value = DateAdd("m", 1, Date)
End Sub
日付の計算2

一年後の日付を表示させたい場合は、「yyyy(年)」と記述してください。

Sub 一年後の日付を書き込み()
    Range("B1").Value = Date
    Range("B2").Value = DateAdd("yyyy", 1, Date)
End Sub
日付の計算3

日時・時刻を書き込み

日付だけではなく、日時を表示することもできます。
「Date」ではなく、「Now」と記述してください。

Sub 日時を書き込み()
    Range("A1").Value = Now
End Sub
日時を書き込み

時刻だけを表示させることもできます。
「Time」を記述してください。

Sub 時刻を書き込み()
    Range("A1").Value = Time
End Sub
時刻を書き込み1

24時間表示にしたり、秒を省きたい場合は、「Format」を使います。

Sub 時刻を書き込み2()
    Range("A1").Value = Format(Time, "HH:MM")
End Sub
時刻を書き込み2

Format:日時の形式を指定できる
Time:時刻
HH:MM:時間と分数のみの形式

数値(シリアル値)を日付に変換

シリアル値(日付を数値で表したもの)を日付に変換することができます。

Sub 数値を日付に変換()
    Range("A1").Value = CDate(Range("A1").Value)
End Sub
数値を日付に変換1

CDate:シリアル値を日付に変換


シリアル値が入ったセルの表示形式を変更することでも日付に変換できます。

Sub 表示形式を変更()
    Range("A1").NumberFormat = "yyyy/mm/dd"
End Sub

NumberFormat:表示形式を変更
yyyy/mm/dd:日付形式

数値を日付に変換2

表示形式がユーザー定義になっていますが、日付形式に変わっていることがわかります。

スポンサードリンク

日付の活用法

ここからは、実践で使える日付の活用法を紹介いたします。

日付を比較

2つの日付を比較して、何日間あるのかを計算することができます。
たとえば、下記のように本日の日付と期限日を比較することで、期限まで何日あるのかを表示できます。

Sub 日付の比較()
    Range("B3") = DateDiff("d", Range("B1").Value, Range("B2").Value)
End Sub
日付を比較1
日付を比較2

期限切れをチェック

期限切れになったことを知らせることもできます。
今回は、A1セルに入力された期限日と、本日の日付を比較して計算した例です。

Sub 期限切れをチェック()
    Dim kigen As Date
    kigen = Range("A1").Value
    
    If Date > kigen Then
        MsgBox "期限切れです!"
    ElseIf Date = kigen Then
        MsgBox "本日が期限です!"
    Else
        MsgBox "まだ期限内です"
    End If
End Sub
期限切れチェック

条件分岐にはIfを使っています。
Ifについては、下記記事でわかりやすく解説しております。

スポンサードリンク

うまく動作しないときの対処法

エラーが発生する

コンパイルエラー・実行時エラー

コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。

警告表示

マクロが無効になっている表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。

スポンサードリンク

最後に

VBA(マクロ)で日付を表示させる方法を解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

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