【Excel VBA基礎】日付データの取り扱い方

業務関連のドキュメントは日付で定期的に管理するケースが多いかと思います。

例えば日報、週報、月次報告書、四半期、半期、通期の報告書などです。

このようなドキュメントは日付が入ったフォルダやファイル名になっていませんでしょうか。

例えば月報であれば「201906」yyyymm形式のフォルダにまとまっているイメージです。

自動化や効率化を考えるときにこのような日付の扱い方が重要になってきます。なぜなら日付の形式が異なるとエラーの原因になりうるからです。

先ほどの例のフォルダ名を参照するVBAがあったとき、「20196」のフォルダ名となっていたならば、ファイルがないとエラーメッセージが表示されるでしょう。

今回はVBA基礎シリーズとしてそんな日付データの扱い方のおさらいをしたいと思います。


VBA日付関数一覧

現在の日付を取得する

Date関数を使用して現在のシステム日付を返します。
Date
サンプル:

Sub test()
    Debug.Print Date
End Sub

結果:2019/07/03

年・月・日を取得する

以下の関数を使用します。()内はDate関数でシステム日付を入れています。
Year(Date):日付データから年を取得する
Month(Date):日付データから月を取得する
Day(Date):日付データから日を取得する
サンプル:

Sub test()
    Debug.Print Year(Date)
    Debug.Print Month(Date)
    Debug.Print Day(Date)
End Sub

結果:
2019
7
1

日付を加算、減算する

日付を加算、減算するには、DateAdd関数を使用します。

DateAdd関数の書式は以下の通りです。
DateAdd(<設定値>,<計算>,Date)

<設定値> 説明
yyyy
q 四半期
m
y 年間通算日
d
w 週日
ww
h
n
s

<計算>
正の値は将来日付としてカウント、負の値は過去日付としてカウントされます。

例:
現在(2019/07/01)から二か月後の値を返します。
DateAdd(“m” , 2, Date)
結果:2019/09/01

現在(2019/07/02 0:00:00)から2時間後の値を返します。
DateAdd(“h”, 2, Now)
結果:2019/07/02 2:00:00

データを日付型に変換する

受け渡されたデータを日付型に変換するにはCDate関数を使用します。
Excelの値が日付として入っていても文字として渡されたなら文字情報として扱われます。これをCDate関数により日付に変換し、日付の加減や条件分岐に利用することが可能となります。
CDate(<日付にしたいデータ>)
サンプル:

Sub test()
    Debug.Print CDate("2019年7月1日")
End Sub

結果:2019/07/01

日付型に変換できるか判定する

場合によっては2019/2/30などカレンダーに存在しない値が入るケースがあるかもしれません。そのチェックを行うにはIsDate関数を使用します。
IsDate(<日付にしたいデータ>)
チェック用なので戻り値はブール型の2択となります。
True:日付型に変換できます。
False:日付型に変換できません。

受け渡されたデータで例えば“2019年6月1日”など日本語表記の場合に日付型に変換するにはDateValue関数を使用します。CDate関数より万能です。
DateValue(<日付にしたいデータ>)
サンプル:

Sub test()
    Debug.Print DateValue("2019年7月1日")
End Sub

結果:2019/07/01

同じように“午後3.00.00”のように日本語表記を時間型に変換するTimeValue関数があります。
TimeValue(<時間にしたいデータ>)

日付型から文字列に変換する

Date型の日付を文字列に変換するにはFormat関数を使用します。
Format(Date, <設定値>)
時刻であれば”hh:mm:ss”、冒頭の/なしの年月であれば”yyyymm”となります。

日付を比較する

比較対象は日付である必要があるため、文字情報をCDate関数により日付に変換します。判定はIF文の不等号でおこない、システム日付の今と比較しそれ以前であれば過去、以降であれば未来という判定結果となります。
サンプル:

Sub test()
    If CDate("2019年7月3日") < Date Then
            Debug.Print "過去の日付です。"
        Else
            Debug.Print "未来の日付です。"
    End If
End Sub

結果:未来の日付です。

DateAdd関数を使い日付の加減を行うことも可能です。
今日から1日をプラスをしました。
サンプル:

Sub test()
    If CDate("2019年7月3日") < DateAdd("d", 1, Date) Then
            Debug.Print "過去の日付です。"
        Else
            Debug.Print "未来の日付です。"
    End If
End Sub

結果:過去の日付です。

コメントを残す

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