Excel上級者

VBAで今日の日付を取得する方法|Date関数・Now関数・Format変換を完全解説

しんたろ。
この記事でわかること
  • Date関数で今日の日付を取得する基本的な使い方
  • Now関数で日付+時刻を同時に取得する方法
  • Format関数で日付の表示形式をカスタマイズする手順
  • DateAdd・DateDiffで日付の加算・差分計算をする方法
  • セルに今日の日付を自動入力するマクロの書き方

Excel VBAで今日の日付を取得したい場面は、業務マクロを作るうえで非常によく出てきます。ファイルを開いたときに自動で日付を記録したい、ボタンを押したら今日の日付をセルに入力したい、日付の計算をして期限を管理したい——こうした要求のすべてに対応できるのがDate関数です。

本記事では、VBAで日付を扱う基本中の基本であるDate関数の使い方から、Now関数との違い、Format関数による書式変換、DateAdd・DateDiffを使った日付計算、そして実務でそのまま使えるマクロの書き方まで、段階的にわかりやすく解説します。VBA初心者の方でも手を動かしながら学べる内容になっていますので、ぜひ最後まで読んでみてください。

この記事を読むとできること
この記事で解説するVBAコードを実行すると、以下のような結果が得られます
‘ 今日の日付を各セルに書き込むマクロ
Sub 今日の日付を入力()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    ws.Range(“B2”).Value = Date
    ws.Range(“B3”).Value = Format(Date, “yyyy年mm月dd日”)
    ws.Range(“B4”).Value = Format(Date, “yyyy/mm/dd”)
    ws.Range(“B5”).Value = Format(Date, “ggge年m月d日”)
    MsgBox “日付の入力が完了しました”
End Sub
下のデモで実行結果を確認できます
📊 日付フォーマット.xlsx – Excel
AB
1 フォーマット結果
2 Date関数 2026/02/21
3 yyyy年mm月dd日 2026年02月21日
4 yyyy/mm/dd 2026/02/21
5 和暦(ggge年m月d日) 令和8年2月21日
準備完了 100%
4種類の日付フォーマットがセルに入力されました!
☝ Format関数で日付の表示形式を自由にカスタマイズできます

VBAで今日の日付を取得する基本(Date関数)

VBAで今日の日付を取得するには、Date関数を使います。引数不要で呼び出せるシンプルな関数で、現在のシステム日付をDate型で返します。まずはその基本的な使い方を確認しましょう。

Date関数の使い方

Date関数は引数なしで使います。戻り値はDate型(日付型)で、時刻情報は含まれません。最もシンプルな使用例は次のとおりです。

Sub 今日の日付を取得()
Dim today As Date
today = Date
MsgBox "今日の日付: " & today
End Sub

このコードを実行すると、メッセージボックスに「今日の日付: 2024/02/19」のように表示されます(実行した日付によって変わります)。

ポイント
  • Date関数は引数不要で呼び出せる
  • 戻り値はDate型(日付のみ、時刻は含まない)
  • Variant型の変数でも受け取れるが、Date型を明示するほうが安全

変数に格納せず、直接セルに代入することも可能です。

Sub 日付をセルに入力()
Range("A1").Value = Date
End Sub

セルA1にDate型の値が代入されるため、Excelが自動的に日付として認識してセルに表示します。ただし、セルの表示形式によって見た目が変わる点は覚えておいてください。

Now関数で日付+時刻を取得する

日付だけでなく現在の時刻も同時に取得したい場合は、Now関数を使います。Now関数はシステムの現在日時を「年/月/日 時:分:秒」の形式で返します。

Sub 現在日時を取得()
Dim nowTime As Date
nowTime = Now
MsgBox "現在日時: " & nowTime
End Sub

実行すると「現在日時: 2024/02/19 14:35:22」のような結果が返ります。作業ログの記録や、処理の開始・終了時刻を保存したい場合などに重宝します。

時刻部分だけを取得したい場合はTime関数が使えます。

Sub 現在時刻のみ取得()
MsgBox "現在時刻: " & Time
End Sub

DateとNowの違いをまとめると

Date関数とNow関数は似ていますが、返す値が異なります。どちらを使うべきかは用途によって使い分けましょう。

DateとNowの違い
  • Date関数:今日の日付のみ(時刻なし) 例)2024/02/19
  • Now関数:現在の日付+時刻 例)2024/02/19 14:35:22
  • Time関数:現在の時刻のみ(日付なし) 例)14:35:22

日付だけを記録・比較したい処理にはDate関数、タイムスタンプとして日時の両方が必要な場合はNow関数と覚えておくと迷いません。

VBAで日付の表示形式を変換する(Format関数)

Date関数やNow関数で取得した日付は、そのままではシステムの日付形式で表示されます。「yyyy年mm月dd日」や「mm/dd/yyyy」のように自由に書式を変えたい場合は、Format関数を組み合わせて使います。

Format関数の基本構文は次のとおりです。

Format(日付, "書式文字列")

よく使う日付フォーマット一覧

実務でよく使われる書式文字列と、対応する出力例をまとめます。

Sub 日付フォーマットの例()
Dim d As Date
d = Date

' スラッシュ区切り(標準形式)
Debug.Print Format(d, "yyyy/mm/dd") ' 例: 2024/02/19

' ハイフン区切り(ISO形式)
Debug.Print Format(d, "yyyy-mm-dd") ' 例: 2024-02-19

' 日本語表記
Debug.Print Format(d, "yyyy年mm月dd日") ' 例: 2024年02月19日

' 曜日を含む
Debug.Print Format(d, "yyyy/mm/dd(aaa)") ' 例: 2024/02/19(月)

' 月と日のみ
Debug.Print Format(d, "mm月dd日") ' 例: 02月19日

' 年月のみ
Debug.Print Format(d, "yyyy年mm月") ' 例: 2024年02月
End Sub

主な書式文字列の意味
  • yyyy:4桁の西暦年(例: 2024)
  • yy:2桁の西暦年(例: 24)
  • mm:2桁の月(例: 02)
  • m:ゼロ埋めなしの月(例: 2)
  • dd:2桁の日(例: 09)
  • d:ゼロ埋めなしの日(例: 9)
  • aaa:短い曜日名(例: 月)
  • aaaa:長い曜日名(例: 月曜日)

Format関数が返す値は文字列(String型)であることに注意してください。日付計算に使う場合はCDate関数などで変換が必要です。セルへの表示や文字列の結合にはそのまま使えます。

和暦(元号)表示にする方法

日本の業務では和暦が必要な場面も多くあります。VBAのFormat関数で和暦を直接出力するのはやや複雑ですが、Application.Textメソッドを使うと比較的簡単に実現できます。

Sub 和暦に変換()
Dim d As Date
d = Date

' Application.Textでワークシート関数のTEXTを呼び出す
Dim wareki As String
wareki = Application.Text(d, "ggge年m月d日")
MsgBox wareki ' 例: 令和6年2月19日
End Sub

書式文字列のgggが元号(令和、平成など)を表し、eが元号内の年を表します。ggでは元号の略称(例: 令)、gではアルファベット略称(例: R)が出力されます。

和暦フォーマット書式文字列
  • ggg:元号フルネーム(例: 令和)
  • gg:元号略称(例: 令)
  • g:ローマ字略称(例: R)
  • e:元号内の年数(例: 6)
  • ee:2桁の元号内年数(例: 06)

VBAで日付の計算をする

日付を取得できたら、次は日付の計算です。「30日後の日付を求める」「2つの日付の間が何日あるか調べる」「特定の月の末日を取得する」といった処理は、VBAに用意された日付関数を使うことで簡潔に書けます。

DateAdd関数(日付の加算・減算)

DateAdd関数は、指定した日付に一定の期間を加算・減算した日付を返します。

構文:DateAdd(単位, 数値, 日付)

Sub DateAddの例()
Dim d As Date
d = Date ' 今日の日付

' 7日後
Debug.Print DateAdd("d", 7, d)

' 1ヶ月後
Debug.Print DateAdd("m", 1, d)

' 3ヶ月前
Debug.Print DateAdd("m", -3, d)

' 1年後
Debug.Print DateAdd("yyyy", 1, d)

' 2週間後
Debug.Print DateAdd("ww", 2, d)
End Sub

DateAddの単位文字列一覧
  • “yyyy”:年
  • “q”:四半期
  • “m”:月
  • “y”:年間通算日
  • “d”:日
  • “w”:週日(曜日)
  • “ww”:週
  • “h”:時間
  • “n”:分
  • “s”:秒

負の数値を指定すると日付を遡ることができます。「3日前」を求めるにはDateAdd("d", -3, Date)と書くだけでOKです。また、日付の加算は単純にDate + 1(翌日)やDate - 1(前日)のように算術演算子でも可能です。

DateDiff関数(日付の差分を計算)

DateDiff関数は、2つの日付の間隔を指定した単位で返します。「期限まで何日あるか」「入社から何年経過しているか」といった計算に使います。

構文:DateDiff(単位, 開始日, 終了日)

Sub DateDiffの例()
Dim startDate As Date
Dim endDate As Date

startDate = Date ' 今日
endDate = #12/31/2024# ' 年末

' 今日から年末まで何日か
Dim days As Long
days = DateDiff("d", startDate, endDate)
MsgBox "年末まであと " & days & " 日"

' 今日から年末まで何週間か
Dim weeks As Long
weeks = DateDiff("ww", startDate, endDate)
MsgBox "年末まであと " & weeks & " 週間"
End Sub

DateDiff関数の単位文字列はDateAddと共通です。開始日と終了日を逆にすると負の値が返るため、大小関係に注意して使いましょう。

DateSerial関数(年月日から日付を作成する)

DateSerial関数は、年・月・日の数値を指定してDate型の値を作成します。変数に格納した年・月・日から日付を組み立てたいときに便利です。

構文:DateSerial(年, 月, 日)

Sub DateSerialの例()
' 2024年3月1日を作成
Dim d As Date
d = DateSerial(2024, 3, 1)
MsgBox d ' 2024/03/01

' 今月の末日を取得(翌月の0日目 = 今月末)
Dim lastDay As Date
lastDay = DateSerial(Year(Date), Month(Date) + 1, 0)
MsgBox "今月末: " & lastDay

' 今年の最終日
Dim yearEnd As Date
yearEnd = DateSerial(Year(Date), 12, 31)
MsgBox "今年末: " & yearEnd
End Sub

DateSerialで月末を求めるテクニック

DateSerialは「0日目」を指定できます。たとえばDateSerial(2024, 3, 0)は「2024年3月の0日目」=「2024年2月29日(末日)」となります。これを利用してDateSerial(Year(Date), Month(Date) + 1, 0)と書くことで、常に当月末日を取得できます。月の日数計算が不要になる便利なテクニックです。

DateSerialは年・月・日を個別に変数で持っている場合や、ループで月を変えながら日付を生成する場合に特に威力を発揮します。Year関数・Month関数・Day関数と組み合わせて使うのが定番です。

VBAでセルに今日の日付を入力するマクロ

ここまで学んだ知識を活かして、実際に業務で使えるマクロを作りましょう。「ボタンを押したら今日の日付を特定のセルに入力する」というシンプルな要件から始めて、より実践的なコードへと発展させます。

基本的なマクロコード

最もシンプルなパターンは、アクティブセルや固定のセル番地に今日の日付を代入するものです。

Sub 今日の日付をA1に入力()
' セルA1に今日の日付を入力
Range("A1").Value = Date
End Sub

日付を文字列として入力したい場合は、Format関数で変換してから代入します。

Sub 今日の日付を文字列で入力()
' "yyyy/mm/dd"形式の文字列として入力
Range("A1").Value = Format(Date, "yyyy/mm/dd")
End Sub

文字列として代入するとExcelが日付として認識しない場合があります。セル書式が「文字列」に設定されているときは特に注意が必要です。日付として認識させたい場合はValue2プロパティやCDate関数を活用してください。

実務例:ボタンクリックで今日の日付を自動入力

実務でよくある「作業記録シートに今日の日付・担当者・内容を入力する」マクロを例として紹介します。

Sub 作業記録を追加()
Dim ws As Worksheet
Dim lastRow As Long

ws = ThisWorkbook.Worksheets("作業記録")

' 最終行の次の行を求める
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1

' A列: 今日の日付
ws.Cells(lastRow, 1).Value = Date
ws.Cells(lastRow, 1).NumberFormatLocal = "yyyy/mm/dd"

' B列: 現在時刻
ws.Cells(lastRow, 2).Value = Format(Now, "hh:mm")

' C列: 担当者名(入力ダイアログ)
Dim userName As String
userName = InputBox("担当者名を入力してください", "担当者入力")
If userName = "" Then
MsgBox "キャンセルされました"
Exit Sub
End If
ws.Cells(lastRow, 3).Value = userName

MsgBox "作業記録を追加しました(" & Format(Date, "mm/dd") & ")"
End Sub

コードの解説
  • Cells(ws.Rows.Count, 1).End(xlUp).Row + 1でA列の最終行の次の行番号を取得し、常にデータの末尾に追記します
  • NumberFormatLocal = "yyyy/mm/dd"でセルの表示形式を同時に設定しています
  • InputBoxで担当者名を動的に入力させています。キャンセル時は空文字が返るので、その場合は処理を中断しています

このマクロをシート上のボタンに割り当てることで、クリック一発で記録が追加される作業ログシートが完成します。ボタンの作成は「開発」タブ→「挿入」→「ボタン(フォームコントロール)」から行えます。

また、ファイルを開いたときに自動で今日の日付を記録したい場合は、Workbook_Openイベントを使います。

' ThisWorkbookモジュールに記述
Private Sub Workbook_Open()
' ファイルを開いた日時を記録
Worksheets("ログ").Range("A1").Value = Now
Worksheets("ログ").Range("A1").NumberFormatLocal = "yyyy/mm/dd hh:mm"
End Sub

日付取得マクロの動作をデモで確認

Date関数とFormat関数による日付取得の結果を、下のインタラクティブデモで確認できます。

VBAマクロの実行結果は記事冒頭のインタラクティブデモで確認できます。ボタンを押すとアニメーションで動作をシミュレーションします。

よくある質問(FAQ)

Q. VBAのDate関数とワークシートのTODAY関数の違いは何ですか?

VBAのDate関数はVBAコード内で使う関数で、実行時点の日付をDate型で返します。一方、ワークシートのTODAY関数はセルに入力する数式で、ファイルを開くたびに自動で再計算されて常に今日の日付を表示します。VBAからTODAY関数の結果をセルに反映させたい場合はRange("A1").Formula = "=TODAY()"と書けばOKです。ただし、値として固定させたい(再計算させたくない)場合はRange("A1").Value = Dateを使います。

Q. VBAで特定の日付形式(例: yyyy/mm/dd)で文字列として取得するには?

Format関数を使います。Format(Date, "yyyy/mm/dd")と書くと、今日の日付を「2024/02/19」のような文字列として取得できます。文字列が必要な場面(ファイル名への埋め込みや文字列連結など)で活用してください。なお、戻り値はString型になるため、日付計算に使う場合はCDate関数でDate型に変換してから使いましょう。

Q. VBAで明日・昨日の日付を取得するには?

Date関数に整数を加算・減算するだけで簡単に求められます。

Dim tomorrow As Date
Dim yesterday As Date

tomorrow = Date + 1 ' 明日
yesterday = Date - 1 ' 昨日

n日後・n日前を求める場合はDate + nDate - nでOKです。月単位・年単位で計算したい場合はDateAdd関数を使いましょう。

Q. VBAで曜日を取得するには?

Weekday関数で曜日を数値で取得し、WeekdayName関数で文字列(「月曜日」など)に変換できます。

Sub 曜日を取得()
Dim d As Date
d = Date

' 曜日を数値で取得(1=日曜, 2=月曜, ..., 7=土曜)
Dim wdNum As Integer
wdNum = Weekday(d) ' 既定はvbSunday基準
Debug.Print wdNum

' 曜日名を取得(日本語)
Dim wdName As String
wdName = WeekdayName(Weekday(d), False, vbSunday)
Debug.Print wdName ' 例: 月曜日

' 短縮形(月、火、水...)
Dim wdShort As String
wdShort = WeekdayName(Weekday(d), True, vbSunday)
Debug.Print wdShort ' 例: 月
End Sub

Format関数を使う方法もあります。Format(Date, "aaa")で「月」、Format(Date, "aaaa")で「月曜日」が返ります。こちらのほうがシンプルで覚えやすいです。

Q. ワークシート関数のTODAY()をVBAから呼び出す方法は?

VBAからワークシート関数を呼び出すにはWorksheetFunctionオブジェクト、またはApplicationオブジェクトを使います。ただし、TODAY関数は引数なしで現在日付を返すため、VBAのDate関数で代替できます。

' セルの数式にTODAY関数を設定する場合
Range("A1").Formula = "=TODAY()"

' VBAコード内でDate関数を使う場合(同じ結果)
Dim d As Date
d = Date

VBAコード内では素直にDate関数を使うのが最もシンプルです。TODAY関数をセルに埋め込みたい場合のみ、Formula プロパティを使ってください。

💻 操作を体験してみよう!

実際の操作手順をクリックして体験できます。各ステップをクリックしてみましょう。

Microsoft Visual Basic for Applications – 日付テスト.xlsm
ファイル(F) 編集(E) 表示(V) 実行(R) デバッグ(D)
プロジェクト
📁 VBAProject
📂 Excel Objects
📄 Sheet1
📂 標準モジュール
📄 Module1
‘ Date関数で今日の日付を取得 Sub Date関数デモ() Dim today As Date today = Date Debug.Print “今日: “ & today Debug.Print “年: “ & Year(today) Debug.Print “月: “ & Month(today) Debug.Print “日: “ & Day(today) End Sub
‘ Now関数で日付+時刻を取得 Sub Now関数デモ() Dim currentTime As Date currentTime = Now Debug.Print “現在: “ & currentTime Debug.Print “時: “ & Hour(currentTime) Debug.Print “分: “ & Minute(currentTime) Debug.Print “秒: “ & Second(currentTime) End Sub
‘ Format関数で表示形式をカスタマイズ Sub Formatデモ() Dim d As Date d = Date Debug.Print Format(d, “yyyy/mm/dd”) Debug.Print Format(d, “yyyy年m月d日”) Debug.Print Format(d, “ggge年m月d日”) Debug.Print Format(Now, “yyyy/mm/dd hh:nn:ss”) End Sub
イミディエイト ウィンドウ
今日: 2026/03/01 年: 2026 月: 3 日: 1 ■ Date関数で今日の日付を取得しました
現在: 2026/03/01 14:30:15 時: 14 分: 30 秒: 15 ■ Now関数で日付+時刻を取得しました
2026/03/01 2026年3月1日 令和8年3月1日 2026/03/01 14:30:15 ■ Format関数で4パターンの書式を確認しました
✅ タブを切り替えてDate / Now / Formatの違いを比較できます。
1 上のタブで関数を切り替え(Date / Now / Format)
2 「F5 – マクロを実行」ボタンをクリック
3 イミディエイトウィンドウで実行結果を確認

まとめ

本記事では、VBAで今日の日付を取得・操作するための主要な関数と実践的な使い方を解説しました。最後に要点を整理します。

この記事のまとめ
  • Date関数:引数なしで今日の日付(Date型)を返す。最もよく使う日付取得の基本
  • Now関数:現在の日付+時刻を返す。タイムスタンプを記録したいときに使う
  • Format関数:日付の表示形式を文字列に変換。”yyyy/mm/dd”などの書式文字列で自由にカスタマイズ可能
  • DateAdd関数:指定した単位で日付を加算・減算する。月単位・年単位の計算はこれを使う
  • DateDiff関数:2つの日付の差分を指定単位で返す。「あと何日」の計算に便利
  • DateSerial関数:年・月・日の数値から日付を生成する。月末日の取得にも使えるテクニックあり

日付操作はVBAマクロの中でも非常に頻出のテーマです。今回紹介した関数を組み合わせることで、作業ログの自動記録、期限管理、月次レポートの自動化など、さまざまな業務効率化に応用できます。まずはDate関数から試してみて、慣れてきたらDateAddやDateSerialにも挑戦してみてください。

VBAをもっと活用したい方は、以下の関連記事もあわせてご覧ください。

【VBA入門】SubとFunctionの違い|戻り値・呼び出し方法を徹底解説
【VBA入門】SubとFunctionの違い|戻り値・呼び出し方法を徹底解説
【Excel】オートフィルの使い方|連番・日付の自動入力からフラッシュフィルまで完全ガイド
【Excel】オートフィルの使い方|連番・日付の自動入力からフラッシュフィルまで完全ガイド
【2026年版】Excelでよく使う関数一覧|初心者が最初に覚えるべき関数を完全ガイド
【2026年版】Excelでよく使う関数一覧|初心者が最初に覚えるべき関数を完全ガイド
Excel業務の自動化
その手作業、自動化しませんか?

VBA開発・GAS連携・Webアプリ化まで、
業務に合わせた最適な自動化をご提案します。

1,600部ツール販売実績
15年製造業の業務経験
無料で相談する →
初回相談無料・お見積りだけでもOK

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
記事URLをコピーしました