「VBA セルの値をdate型で取得する」
という検索キーワードに気が付きました。
この検索だけでは、何がしたかったのか詳細がわかりませんが、拙著『いちばんやさしいPowerPoint VBAの教本』で繰り返し行っているように、ローカルウィンドウで変数の中身を確認することをおすすめします。
アクティブセルに入力されているデータの型を確認するSubプロシージャ
まずは以下のSubプロシージャを作成してください。Dim var As Variant
var = ActiveCell.Value
Stop
End Sub
アクティブセルのデータを、Variant型変数varに代入して、Stopステートメントで中断するだけのプロシージャです。
ローカルウィンドウでデータ型を確認しましょう
Subプロシージャを作成したら、何らかのデータが入力されているセルをアクティブにして、ローカルウィンドウを表示した状態で実行しましょう。
Stopステートメントで中断したら、変数varの型をローカルウィンドウで確認です。
日付の場合
日付データの入力されたセルがアクティブな状態で実行すれば、Variant型で宣言されていた変数にDate型のデータが代入されたので、
上図のとおり「Variant/Date」と表示されます。
整数の場合
整数の入力されたセルをアクティブにして実行すれば、
Double型です。
文字列の場合
日付データを入力しておいてから、先頭にシングルクォーテーション「'」をつけた状態で実行すれば、
String型です。
変数をDate型で宣言した場合
つづいて、先ほどのSubプロシージャを以下のような形に編集してから再度実行しましょう。Dim var As Date ' Variant
var = ActiveCell.Value
Stop
End Sub
整数の入力されたセルをアクティブにして実行すると、Date型で宣言された変数に、Date型として扱い得る整数が格納されたので、
「Date」と表示されます。
上図は「-9999」と入力されているセルがアクティブな状態で実行したところです。
日付データを入力しておいてから、先頭にシングルクォーテーション「'」をつけた状態で実行した場合も、
「Date」です。
上図は「'2020/6/29」と、文字列データが入力されているセルがアクティブな状態で実行したところです。
データ型に厳密なプログラミング言語に慣れた方だと、非常に気持ち悪い挙動だと思いますが、これがVBAの仕様です。
勝手に型変換を行ってくれます。一応、日付データに変換するCDate関数はありますが。
もちろん、日付に変換できないデータの入力されたセルがアクティブな状態で実行すれば、実行時エラーが発生します。
Home » Excel VBA Rangeオブジェクト » セルの値をDate型で取得するには?