xcelのVBA(Visual Basic for Applications)を使うと、業務の効率化がグッと進みます。
特に「日付の処理」は日報や集計、勤怠管理など、ビジネスシーンでよく使われる重要なスキルです。
この記事では、VBA初心者の方でもすぐに使えるように、日付に関する基本的な処理方法から応用テクニックまでをわかりやすく解説します。
実際のコード例を交えながら、実務でもすぐに役立つ内容に仕上げていますので、ぜひご活用ください。
VBAで日付を取得する方法
VBAで現在の日付を取得するには、Date
関数を使います。
Sub 現在の日付を取得()
Dim today As Date
today = Date
MsgBox "今日の日付は " & today
End Sub
Date
関数は、システム上の「今日の日付」を返してくれます。
たとえば、勤怠処理や今日の日付でファイル名を作るときに便利です。
日付の加算・減算(○日後・○日前)
日付に対して日数を加算・減算したいときは、DateAdd
関数または単純な計算が使えます。
例1:7日後の日付を取得
Sub 一週間後の日付()
Dim nextWeek As Date
nextWeek = Date + 7
MsgBox "一週間後は " & nextWeek
End Sub
例2:30日前の日付を取得
Sub 過去の日付を取得()
Dim lastMonth As Date
lastMonth = DateAdd("d", -30, Date)
MsgBox "30日前は " & lastMonth
End Sub
“y”(年)、”m”(月)、”d”(日)を指定することで、様々な期間の加算・減算が可能です。
曜日を取得する方法
日付から曜日を取得するには、WeekdayName
やFormat
関数を使います。
Sub 曜日を表示()
Dim wd As String
wd = Format(Date, "dddd")
MsgBox "今日は " & wd & " です"
End Sub
“dddd” は「完全な曜日名」(例:水曜日)を表します。
“ddd” を使えば「水」など省略表記にもできます。
年・月・日をそれぞれ取り出す方法
特定の日付から「年」「月」「日」をそれぞれ取得するには、Year
、Month
、Day
関数を使います。
Sub 年月日を取り出す()
Dim d As Date
d = Date
MsgBox "年: " & Year(d)
MsgBox "月: " & Month(d)
MsgBox "日: " & Day(d)
End Sub
例えば「2025/4/16」であれば、Year
は2025、Month
は4、Day
は16を返します。
日付の書式を指定して表示する
Format
関数を使えば、日付の表示方法を自由に変えることができます。
Sub 日付の書式変更()
Dim today As Date
today = Date
MsgBox Format(today, "yyyy年mm月dd日")
MsgBox Format(today, "yy/mm/dd")
MsgBox Format(today, "mm-dd-yyyy")
End Sub
Format
関数の中で指定できる主な書式:
yyyy
:西暦4桁yy
:西暦2桁mm
:月2桁dd
:日2桁
自分の用途に応じて自由にカスタマイズできます。
セルの値を日付として扱う
セルに入力された値が日付であれば、それをVBAで読み取って処理できます。
Sub セルから日付を取得()
Dim d As Date
d = Range("A1").Value
MsgBox "セルA1の日付は " & d
End Sub
逆に、VBAで計算した日付をセルに書き込むことも可能です。
Sub セルに日付を書き込む()
Range("A1").Value = Date + 3 ' 3日後
End Sub
祝日・土日を判定する方法(応用)
曜日を使って土日かどうかを判定できます。
Sub 土日判定()
Dim d As Date
d = Date
If Weekday(d) = vbSaturday Or Weekday(d) = vbSunday Then
MsgBox "今日は土日です"
Else
MsgBox "平日です"
End If
End Sub
祝日は別途リストを作成し、VLookup
などで参照すると判定可能になります。
年末年始や月末・月初を判定する方法
月末を判定する
Sub 月末を確認()
Dim today As Date
today = Date
If Day(DateAdd("d", 1, today)) = 1 Then
MsgBox "今日は月末です"
Else
MsgBox "今日は月末ではありません"
End If
End Sub
年末を判定する
Sub 年末を判定()
If Month(Date) = 12 And Day(Date) = 31 Then
MsgBox "今日は大晦日です"
End If
End Sub
このような条件を使えば、処理の切り替えが柔軟にできます。
まとめ:VBAで日付処理をマスターしよう!
VBAで日付を扱えるようになると、日報・週報・月次レポートの自動作成や、ファイルの整理など、さまざまな作業が効率化できます。
今回紹介した基本的な関数や使い方を組み合わせて、自分の業務に合ったVBAマクロを作ってみましょう。