VBAでは、日付や時刻を扱うためのデータ型として「Date型」 が用意されています。Date 型を活用すれば、日付や時間の計算、フォーマット変換、システムの日付取得などが簡単にできます。
本記事では、VBAの 日付型(Date)の基本 や 実践的な使い方 を詳しく解説します!
目次
1. Date型とは?
Date 型は、日付と時刻の両方を格納できるデータ型 です。
Excel VBAでは、日付は 整数部分、時刻は 小数部分 を使って内部的に管理されます。
Date型の特徴
- 日付(年月日)と時刻(時分秒)を扱える
- 内部的には「シリアル値(数値)」として格納される
- 1900年1月1日を「1」とし、それ以降の日付は連続した数値で表現
- 小数部分が時刻を表し、「0.5」は正午(12:00:00)
- メモリ使用量は8バイト
2. Date型の宣言と代入
基本的な使い方
Dim myDate As Date
myDate = #2025/02/25# '日付を代入
Debug.Print myDate '出力: 2025/02/25
現在の日付や時刻を取得
VBAでは、システムの日付や時刻を取得する組み込み関数が用意されています。
Dim today As Date
today = Date '現在の日付を取得
Debug.Print today '出力: 2025/02/25(例)
Dim nowTime As Date
nowTime = Now '現在の日付と時刻を取得
Debug.Print nowTime '出力: 2025/02/25 14:30:00(例)
Dim currentTime As Date
currentTime = Time '現在の時刻のみを取得
Debug.Print currentTime '出力: 14:30:00(例)
日付のシリアル値
VBAの Date 型は シリアル値(数値) として扱われるため、直接 Double 型に変換すると確認できます。
Dim testDate As Date
testDate = #2025/02/25#
Debug.Print CDbl(testDate) '出力: 45713 (シリアル値)
この 45403 という値は、1900年1月1日からの経過日数 を表しています。
3. 日付型の演算(加算・減算)
VBAでは、Date 型は数値として扱われるため、+ や - を使って日付の加算・減算が可能です。
Dim baseDate As Date
baseDate = #2025/02/25#
Debug.Print baseDate + 1 '出力: 2025/02/26(1日後)
Debug.Print baseDate - 7 '出力: 2025/02/18(7日前)
また、TimeValue を使えば、時刻の加減算も可能です。
Dim baseTime As Date
baseTime = #12:00:00#
Debug.Print baseTime + TimeValue("01:30:00") '出力: 13:30:00
4. 日付関数の活用
VBAには、日付を扱うための便利な関数が多数用意されています。
① 年・月・日を取得
Dim targetDate As Date
targetDate = #2025/02/25#
Debug.Print Year(targetDate) '出力: 2025
Debug.Print Month(targetDate) '出力: 2
Debug.Print Day(targetDate) '出力: 25
② 曜日を取得
Debug.Print Weekday(targetDate) '出力: 3(1=日曜, 2=月曜, 3=火曜, ...)
Debug.Print WeekdayName(Weekday(targetDate)) '出力: 火曜日
③ 特定の単位を加算
DateAdd を使うと、日付や時間単位で柔軟に加算できます。
Debug.Print DateAdd("d", 10, targetDate) '10日後
Debug.Print DateAdd("m", -1, targetDate) '1か月前
Debug.Print DateAdd("yyyy", 2, targetDate) '2年後
| 単位 | 省略形 |
|---|---|
| 年 | “yyyy” |
| 月 | “m” |
| 週 | “ww” |
| 日 | “d” |
| 時 | “h” |
| 分 | “n” |
| 秒 | “s” |
5. 日付のフォーマット変換
日付を特定の形式で表示するには、Format 関数を使います。
Dim formattedDate As String
Dim targetDate As Date
targetDate = #2025/02/25#
formattedDate = Format(targetDate, "yyyy/mm/dd (ddd)")
Debug.Print formattedDate '出力: 2025/02/25 (火)
他にも、以下のようなフォーマットが使えます。
| 書式 | 出力例 |
|---|---|
"yyyy/mm/dd" | 2025/02/25 |
"mm/dd/yyyy" | 02/25/2025 |
"yyyy年m月d日" | 2025年2月25日 |
"h:mm:ss AM/PM" | 2:30:45 PM |
"yyyy-mm-dd hh:nn:ss" | 2025-02-25 14:30:45 |
6. 日付型の注意点
① 1900年1月1日より前の日付は扱えない
VBAの Date 型は 1900年1月1日以降 の日付しかサポートしていません。
例えば、1600年のデータを扱おうとするとエラーになります。
② シリアル値を意識する
日付は 数値として保存されるため、計算時に意図しない結果が出ることがある ので注意が必要です。
Dim testDate As Date
testDate = 1.5 '1900/01/01 12:00:00 になる
Debug.Print testDate
7. まとめ
Date型は 日付と時刻 を格納できるDate型の内部データは シリアル値(数値) で表現されるDate、Now、Timeで 現在の日付・時刻を取得 できる+や-で 日付・時刻の加算・減算 ができるFormat関数を使うと 日付のフォーマットを変更 できるDateAdd、Year、Monthなどの関数を使えば 便利な日付操作が可能
VBAの Date 型を活用すれば、業務効率化やデータ処理が格段に楽になります!
活用方法をしっかり押さえて、実践してみてください!
コメント