大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで日付を比較する方法と、差分を出す方法についてご紹介します。日付を比較するには、比較演算子を使うとできます。日付の差分は、DateDiffを使えば簡単です。DateDiffを応用すれば、月の何週目かを取得することができます。

はじめに

この記事では、日付を比較する方法と、2つの日付から差分を計算する方法、年初めから日数や週間を取得する方法についてご紹介します。

日付を比較するには、比較演算子を使うとできます。

2つの日付から差分を計算するには、DateDiffを使うと簡単です。

年初めからの日数や週間を取得するには、DatePartが使えます。

では、具体例を挙げながら解説していきます。

この記事で紹介すること

  • 日付を比較する方法
  • 2つの日付から差分を計算する方法
  • 年初めからの日数と週間を取得する方法

目次から見たい項目へ移動すると便利ですよ。

目次

ポイントとなるVBAコード

初めに、ポイントとなるVBAコードについて記載しておきます。

VBAコードだけ確認した場合に、ご活用ください。

'日付の比較
a = CDate("2020/1/1")
b = CDate("2020/1/2")
If a < b Then '大なり
If a > b Then '小なり
If a = b Then '等しい
If a <> b Then '等しくない

'2つの日付から差分を計算
a = DateDiff("yyyy", "2020/1/1", "2025/1/1") '5年
a = DateDiff("m", "2020/1/1", "2020/6/1") '5カ月
a = DateDiff("d", "2020/1/1", "2020/1/6") '5日
a = DateDiff("ww", "2020/1/1", "2020/2/1") '4週間

'年初めからの日付を計算
a = DatePart("y", "2020/2/5") '36日
a = DatePart("ww", "2020/1/16") '3週目
a = DatePart("w", "2020/1/3") '6週日(金曜日)

では、解説していきます。

VBAで日付を比較する

日付を比較する場合は、演算子を使って比較することができます。

比較演算子は、『<』『>』『=』『<>』などです。

ただし、日付を比較する場合は、日付型で比較する必要があります。

文字列では比較はできない

文字列の日付で、比較をしてみます。

日付『"2020/1/1"』と『"2020/01/02"』を比較するVBAコードになります。

Sub TEST1()
    
    a = "2020/1/1"
    b = "2020/01/02"
    
    '日付を比較(正しく比較できない)
    If a < b Then
        MsgBox b & " の方が大きい"
    Else
        MsgBox a & " の方が大きい"
    End If
    
End Sub

実行してみます。

文字列の日付を比較

文字列の日付で比較した結果

結果は、『2020/1/1 の方が大きい』という結果となりました。

実際は、『"2020/01/02"』の方が大きいので、間違いです。正しく日付を比較できていません。

文字列では、『"01"』と入力したり、『"1"』と入力したりする可能性があります。

なので、文字列の日付では、うまく比較できない場合があります。

日付を比較したい場合は、日付を日付型に変換して、比較しましょう。

日付に変換して演算子で比較

先ほどの日付を比較する例を、日付型に変換した場合でやってみます。

日付『"2020/1/1"』と『"2020/01/02"』を一旦、日付型に変換したあとに比較するVBAコードです。

Sub TEST2()
    
    a = CDate("2020/1/1") '日付型に変換
    b = CDate("2020/01/02") '日付型に変換
    
    '日付を比較
    If a < b Then
        MsgBox b & " の方が大きい"
    Else
        MsgBox a & " の方が大きい"
    End If
    
End Sub

実行してみます。

日付型の日付で比較

文字列の日付を日付型に変換した後に比較した結果

結果は、『2020/01/02 が大きい』という結果となりました。

うまく日付を比較できています。

日付を比較する場合は、日付型に変換しましょう。

VBAのDateDiffを使って2つの日付から差分を計算

次は、2つの日付から差分を出す方法についてご紹介します。

2つの日付の差分は、『DateDiff』を使えばできます。

使い方(DateDiff)

まず、DateDiffの使い方です。

入力は、次のようにします。

『差分 = DateDiff(間隔, 日付1, 日付2)』

間隔には、次の引数を入れることができます。

  • 年:"yyyy"
  • 月:"m"
  • 日:"d"
  • 週:"ww"

日付の差分は、『日付2-日付1』というようになります。

では、具体的な例を挙げて説明していきます。

『年』の差分を取得

2つの日付から『年』の差分を取得するには、DateDiffの引数に『"yyyy"』を入力するとできます。

次のVBAコードは、日付『"2020/1/1"』と『"2025/1/1"』から年の差分を計算します。

Sub TEST3()
    
    a = "2020/1/1"
    b = "2025/1/1"
    
    '年の差分を計算
    c = DateDiff("yyyy", a, b)
    
    MsgBox c
    
End Sub

実行してみます。

2つの日付から年の差分を計算

DateDiffで2つの日付から年の差分を計算した結果

結果は、『5』年となりました。

年の差分を計算することができてます。

『月』の差分を取得

2つの日付から『月』の差分を取得するには、DateDiffの引数に『"m"』を入力するとできます。

次のVBAコードは、日付『"2020/1/1"』と『"2020/6/1"』から月の差分を計算します。

Sub TEST4()
    
    a = "2020/1/1"
    b = "2020/6/1"
    
    '月の差分を計算
    c = DateDiff("m", a, b)
    
    MsgBox c
    
End Sub

実行してみます。

2つの日付から月の差分を計算

DateDiffで2つの日付から月の差分を計算した結果

結果は、『5』カ月となりました。

月の差分を計算することができてます。

『日』の差分を取得

2つの日付から『日』の差分を取得するには、DateDiffの引数に『"d"』を入力するとできます。

次のVBAコードは、日付『"2020/1/1"』と『"2020/1/6"』から日の差分を計算します。

Sub TEST5()
    
    a = "2020/1/1"
    b = "2020/1/6"
    
    '日の差分を計算
    c = DateDiff("d", a, b)
    
    MsgBox c
    
End Sub

実行してみます。

2つの日付から日の差分を計算

DateDiffで2つの日付から日の差分を計算した結果

結果は、『5』日となりました。

日の差分を計算することができてます。

『週』の差分を取得

2つの日付から『週』の差分を取得するには、DateDiffの引数に『"ww"』を入力するとできます。

次のVBAコードは、日付『"2020/1/1"』と『"2020/2/1"』から週の差分を計算します。

Sub TEST6()
    
    a = "2020/1/1"
    b = "2020/2/1"
    
    '週の差分を計算
    c = DateDiff("ww", a, b)
    
    MsgBox c
    
End Sub

実行してみます。

2つの日付から週の差分を計算

DateDiffで2つの日付から週の差分を計算した結果

結果は、『4』週間となりました。

週の差分を計算することができてます。

VBAのDatePartを使って年初めからの日付を計算

年初めからの日付を計算する方法として、『DatePart』があります。

使い方(DatePart)

DatePartには次のように入力します。

『日付間隔 = DatePart(間隔, 日付)』

間隔には、次の引数が入れられます。

  • 年:"yyyy"(Yearを使った方がいい)
  • 月:"m"(Monthを使った方がいい)
  • 日:"d"(Dayを使った方がいい)
  • 年初めからの日数:"y"
  • 年初めからの週間:"ww"
  • 週の日数『週日』:"w"

上でも書いてあるとおり、年、月、日を取得する『"yyyy"』、『"m"』、『"d"』はあまり使わなくてもいいかと思います。

年、月、日を取得したいのであれば、Year、Month、Dayの方が覚えやすいです。

DateDiffは、年初めからの日数、年初めからの週間、週の日数を取得する場合に、結構使えますので、説明していきます。

年初めから『日数』を取得

年初めから『日数』を取得するには、DatePartに『"y"』を入力して取得します。

日付『"2020/2/5"』の年初めからの『日』の間隔を取得してみます。

Sub TEST7()
    
    a = "2020/2/5"
    
    '年初めからの日数を計算
    b = DatePart("y", a)
    
    MsgBox b
    
End Sub

実行してみます。

年初めからの日数を取得

DatePartを使って年初めからの日数を取得した結果

結果は、『36』日間となりました。

1月は31日なので、31+5=36ですので、正しく年初めからの日数が取得できています。

年初めから『週間』を取得

年初めからの『週間』を取得するには、DatePartに『"ww"』を入力します。

日付『"2020/2/5"』で、年初めからの週間を取得してみます。

Sub TEST8()
    
    a = "2020/2/5"
    
    '年初めからの週間を計算
    b = DatePart("ww", a)
    
    MsgBox b
    
End Sub

実行してみます。

年初めからの週間を取得

DatePartで年初めからの週間を取得した結果

結果は、『6』週間となりました。

カレンダーで『2020/2/5』をみてみます。

カレンダーで確認

カレンダーで2020/2/5が年初めから何週目かを確認

日付『2020/2/5』は、年初めから計算すると6週目なので、正しく計算できていることがわかります。

週の日数『週日』を取得

週の日数『週日』を取得するには、DatePartに『"w"』を入力します。

週日は、デフォルトだと、日曜日が1、火曜日が2となって、土曜日が7となります。

週の何日目か、ということです。

日付『"2020/1/3"』の週日を取得してみます。

Sub TEST9()
    
    a = "2020/1/3"
    
    '週日を計算
    b = DatePart("w", a)
    
    MsgBox b
    
End Sub

実行してみます。

週日を取得

DatePartで週日を取得した結果

結果は、『6』週日となりました。

日付『2020/1/3』は、金曜日なので、6となります。正しく週日が取得できています。

実践例

2つの日付から差分を計算するDateDiffと、日付の間隔を取得するDatePartの実践例を紹介します。

興味がある方は、どうぞ。

月の何週目かを取得(DateDiff)

月の何週目かを取得するには、DateDiffをうまく組み合わせるとできます。

やり方は、月の最初の日付との差分をとることでできます。

日付『"2020/1/16"』が月の何週目かを取得するVBAコードです。

Sub TEST10()
    
    a = "2020/1/16"
    
    '2020/1/1との差分を週単位で計算
    b = DateDiff("ww", "2020/1/1", a)
    b = b + 1 '1週分加える
    
    MsgBox b
    
End Sub

日付とその月最初の日付である1日との差分をとって、1を足しています。

実行してみます。

月の何週目かを取得

DateDiffで月の何週目かを取得した結果

結果は、『3』週目となりました。

イメージでいうと次のように計算しています。

月の何週目かを取得するイメージ

DateDiffで付きの何週目かを取得するイメージ

日付『"2020/1/16"』は日曜日を週の初めとしたとき、3週目になるので、月の何週目かを正しく取得できています。

日付からカレンダーの位置を取得(DateDiffとDatePart)

日付からカレンダーの位置を取得する方法をご紹介します。

月の何週目かをDateDiffで取得して、週日をDatePartで取得する、という方法です。

カレンダーから日付『"2020/1/27"』の位置を取得して、塗りつぶしてみます。

Sub TEST11()
    
    a = "2020/1/27"
    
    '月の何週目かを取得
    b = DateDiff("ww", "2020/1/1", a) + 1
    '週の何日目かを取得
    c = DatePart("w", a)
    
    'セルを塗りつぶし
    With ActiveSheet
        .Cells(b, c).Offset(1, 0).Interior.Color = RGB(255, 255, 153)
    End With
    
    
End Sub

実行してみます。

カレンダーを塗りつぶし

カレンダーから日付の位置を取得して塗りつぶした結果

日付『2020/1/27』が塗りつぶされています。

DateDiffとDatePartを使って、カレンダーの位置を取得できています。

今年が閏年かを確認(DatePart)

最後に、DatePartを使って指定した年が、閏年かを判定する方法をご紹介します。

大晦日『"2020/12/31"』で、年初めからの日数を取得して、366日間であれば閏年です。

2020年が閏年かを判定してみます。

Sub TEST12()
    
    a = "2020/12/31" '最後の年
    b = DatePart("y", a) '年初めからの日数
    
    '閏年かを判定
    If b = 366 Then
        MsgBox "閏年です"
    Else
        MsgBox "閏年ではありません"
    End If
    
End Sub

実行してみます。

閏年かを判定

DatePartを使って2020年が閏年かを判定した結果

結果は、『閏年です』となりました。

2020年は、閏年なので、正しく判定できています。

おわりに

この記事では、日付を比較する方法と、2つの日付から差分を計算する方法、年初めから日数や週間を取得する方法についてご紹介しました。

日付を比較するには、比較演算子を使うとできます。

2つの日付から差分を計算するには、DateDiffを使うと簡単です。

少し応用してDateDiffを使えば、月の何週目かを取得することができます。

年初めからの日数や週間を取得するには、DatePartが便利です。週日も取得できます。

参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す