「vba if 文字列とdateをイコールにするには」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
文字列と、Date関数で返される今日の日付を比較する方法、同じかどうかを調べるVBA(Visual Basic for Applications)のコードを探している方による検索でしょうか。
例えば、2014年8月28日(平成26年8月28日)に、以下のようなマクロを実行した場合、
Sub 文字列と日付を比較する_0()
Const STR_DATE As String = "平成26年8月28日"
If STR_DATE = Date Then
MsgBox "今日です"
Else
MsgBox "今日ではありません"
End If
End Sub
メッセージボックスには「今日ではありません」と表示されてしまいます。
文字列としての「平成26年8月28日」とDate関数で返される日付をそのまま比較してもイコールにはなりません。
「vba if 文字列とdateをイコールにするには」
という検索をした方は、これをどうにか比較する方法を探していたのではないかと想像しています。
CDate関数で文字列を日付に型変換して比較するサンプルマクロ
文字列と日付の比較を行うには、文字列を日付型に変換してから比較しましょう。
Const STR_DATE As String = "平成26年8月28日"
If CDate(STR_DATE) = Date Then
MsgBox "今日です"
Else
MsgBox "今日ではありません"
End If
CDate関数は、日付として解釈可能な文字列であれば、引数に指定された文字列を日付型に変換してくれます。
日付として解釈可能な文字列であれば、CDate関数で日付に変換してからDate関数で返される今日の日付と比較すればOKです。
If CDate(STR_DATE) = Date Then
CDate関数で日付に変換できるのは日付と解釈できる文字列だけ
CDate関数で日付型に変換できるのは、あくまでもVBA的に日付と解釈できる文字列に限定されます。
例えば、上記のマクロで、
Const STR_DATE As String = "平成26年8月28日"
の部分を
Const STR_DATE As String = "20140828"
とした場合は、ダメです。
「平成26年8月28日」という文字列をVBAは日付と解釈できますが、「20080828」の場合は日付と解釈できないのです。日本人でパソコンを使っている人の場合、YYYYMMDD形式の文字列・数字を日付と理解することは特殊なことではありませんが、VBA的には文字列や数値としか解釈できません。
YYYYMMDD形式のデータの場合、事前に日付に変換する処理を入れてください。
Const STR_DATE As String = "20140828"
Dim dtm As String
dtm = Format(STR_DATE, "@@@@/@@/@@")
If CDate(dtm) = Date Then
MsgBox "今日です"
Else
MsgBox "今日ではありません"
End If
YYYYMMDD形式のデータを日付型データに変換する方法はいろいろとありますが、ここではFormat関数を使っています。
Format関数を使って「20140828」という文字列を「2014/08/28」という文字列に変換してから、CDate関数で日付型に変換してやればDate関数の返す今日の日付と比較できるようになります。
Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで文字列と日付を比較するには-CDate関数