Excel VBAで日付を比較したいときはないでしょうか。
けど、そんな中で悩むことは、
・Excel VBAで文字列の日付を比較したいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・Excel VBAで文字列の日付を比較する方法
についてまとめます!
もくじ
Excel VBAで扱う日付のデータ形式
Excel VBAで扱う日付のデータ形式は、日付と時間を数値で識別する数字になっています。
シートでは「1900/1/1 0:00:00」をVBAでは「1899/12/31 0:00:00」「1.0」として保持する数値で、整数部分が日付、小数点以下が時刻として扱われています。
例えば、A1セルに文字列「1」を入力し、Excel側の書式設定を日付にすると、
Excelシート側で文字列が日付表記に変換されます。
Excel VBAの日付で扱える比較演算子
Excel VBAの日付で扱える比較演算子について説明をします。
比較演算子の一覧は以下の通りです。
内容は数字と同じように扱えます。なお、結果は Boolean(True/False)となります。
演算子 | 演算名 |
---|---|
= | 等しい |
<> | 等しくない |
> | 大きい |
< | 小さい |
>= | 以上 |
<= | 以下 |
VBAで日付を比較する3パターン
日付を比較するVBAについて説明をします。
まずはワークシート関数で表示された日付をもとに比較をし、次に日付の文字列、最後に日付として認識されない文字列で日付の比較をしていきます。
ワークシート関数の日付を比較するVBA
データの準備
B1セルに本日の日付を算出するTODAY関数を入力します。
=TODAY()
なお、本日日付を取得する関数一覧は以下の通りです。
関数名 | 機能 | 書式 |
---|
NOW | 現在の日付と時刻に対応するシリアル値を返します。 | =NOW() |
TODAY | 現在の日付に対応するシリアル値を返します。 | =TODAY() |
次にB3セルへ比較したい日付を手入力します。
VBAコード
サンプルのVBAコードは以下の通りです。
Sub 日付を比較する1()
Dim dateTemp1 As Date
Dim dateTemp2 As Date
'セルの値を変数に代入します。
dateTemp1 = Range("B1").Value
dateTemp2 = Range("B3").Value
'日付型のセルの値を比較します。
If dateTemp1 > dateTemp2 Then
Range("B5").Value = "本日より前"
Else
Range("B5").Value = "本日より後"
End If
End Sub
VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
VBAを実行する
VBAを実行してみましょう。
はい、B5セルに比較の結果が表示され、関数の結果でも問題なく比較ができることが確認できましたね。
VBAの説明
VBAについて説明をします。
比較元と比較先セルの値を変数に代入します。
dateTemp1 = Range("B1").Value
dateTemp2 = Range("B3").Value
日付型のセルの値を比較し、結果をB5セルへ出力します。
If dateTemp1 > dateTemp2 Then
Range("B5").Value = "本日より前"
Else
Range("B5").Value = "本日より後"
End If
文字列の日付を比較するVBA
文字列の日付を比較するVBAについて説明をします。
データの準備
D1セルに本日の日付を入力します。
令和4年8月2日
次にB3セルへ比較したい日付を手入力します。
VBAコード
サンプルのVBAコードは以下の通りです。
Sub 日付を比較する2()
Dim strTemp1 As String
Dim dateTemp2 As Date
'セルの値を変数に代入します。
strTemp1 = Range("D1").Text
dateTemp2 = Range("B3").Value
'日付型のセルの値を比較します。
If strTemp1 > dateTemp2 Then
Range("B5").Value = "本日より前"
Else
Range("B5").Value = "本日より後"
End If
End Sub
VBAを実行する
VBAを実行してみましょう。
はい、B5セルに比較の結果が表示され、文字列の日付でも問題なく比較ができることが確認できましたね。
VBAの説明
VBAについて説明をします。
文字列を入れる変数はString型で定義します。
Dim strTemp1 As String
Dim dateTemp2 As Date
比較元と比較先セルの値を変数に代入します。文字列のセルの値はTextプロパティとなります。
strTemp1 = Range("D1").Text
dateTemp2 = Range("B3").Value
デバッグすると文字列が格納されている変数はString型であることがわかりますね。
でもString型でも比較演算子で判定する時点で日付型に変換されます。
If strTemp1 > dateTemp2 Then
Range("B5").Value = "本日より前"
Else
Range("B5").Value = "本日より後"
End If
String型からData型に変換して比較するVBA
上記コードをすこし改良して、日付データをString型からData型に変換して比較するようにしたVBAのサンプルコードです。
Sub 日付を比較する3()
Dim strTemp1 As Variant
Dim dateTemp2 As Date
'セルの値を変数に代入します。
strTemp1 = Range("D1").Value
'日付型に変換します。
strTemp1 = CDate(strTemp1)
dateTemp2 = Range("B3").Value
'日付型のセルの値を比較します。
If strTemp1 > dateTemp2 Then
Range("B5").Value = "本日より前"
Else
Range("B5").Value = "本日より後"
End If
End Sub
実行結果は前回と同様ですが、変数の型はしっかりとData型に変換されていますね。
以下を追加し、Cdate関数で文字列を日付型へ変換しています。
strTemp1 = CDate(strTemp1)
日付と認識できない文字列を日付として比較するVBA
日付と認識できない文字列を日付として比較するVBAについて説明をします。
データの準備
F1セルに本日の日付を表す整数をYYYYMMDD形式で入力します。
20220802
次にB3セルへ比較したい日付を手入力します。
VBAコード
サンプルのVBAコードは以下の通りです。
Sub 日付を比較する4()
Dim strTemp1 As Variant
Dim dateTemp2 As Date
'セルの値を変数に代入します。
strTemp1 = Range("F1").Value
'日付形式の文字列に変換します。
strTemp1 = Format(strTemp1, "####/##/##")
'strTemp1 = Format(strTemp1, "0000/00/00")
'セルの値を変数に代入します。
strTemp1 = CDate(strTemp1)
dateTemp2 = Range("B3").Value
'日付型のセルの値を比較します。
If strTemp1 > dateTemp2 Then
Range("B5").Value = "本日より前"
Else
Range("B5").Value = "本日より後"
End If
End Sub
VBAを実行する
VBAを実行してみましょう。
はい、B5セルに比較の結果が表示され、日付と判定されない文字列でも問題なく比較ができることが確認できましたね。
VBAの説明
VBAについて説明をします。
文字列を入れる変数は型が変換されるためVariant型で定義します。
Dim strTemp1 As Variant
Format関数で日付形式の文字列に変換します。
strTemp1 = Format(strTemp1, "####/##/##")
なお、この処理を入れない場合はVBAで日付と判断できないので、「型が一致しません。」のエラーが発生します。
Format関数の戻り値は文字列であるため、 Cdate関数で日付型に変換し変数に代入します。
strTemp1 = CDate(strTemp1)
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・Excel VBAで文字列の日付を比較する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す