hatena
hatena
2023/11/20 (月) 10:52:34
#で囲めば日付型になると思ってました。
この辺はなかなか複雑なので、いろいろ試しているうちに理解できるようになるでしょう。
イミディエイトウィンドウで下記のように記述して、それぞれの行でEnterキーを押してみてください。
?TypeName(#2023/11/20#)
?TypeName("#" & "2023/11/20" & "#")
前者はDate、後者はStringになります。後者は最初の質問のコードの記述と同じことですね。
VBAの決まりとして、コード中で#で囲まれた部分はDate型とみなす、"で囲まれた部分は文字列とみなす、となってます。
"#" は " で囲まれている文字列です。
これは決まりなのでそうなっていると覚えておくしかないです。
一つ教えて頂きたいのですが変数でDate型にしたら IF式には#で囲まなくても自動的にそう認識されるのでしょうか?
Date型の変数に代入する場合、Date型以外の値、例えば文字列を代入する場合、日付と判断できるものはDate型に自動で変換してくれます。(「暗黙の型変換」といいます)
数値を代入すると日付シリアル値(記述日からの経過日数)と判断してDate型に変換します。
If文内の比較式で、型が違う値同士を比較すると、「暗黙の型変換」で型を揃えて比較しようとします。
ただ、「暗黙の型変換」がプログラマーの想定通りになるとは限らないので、できれば型を揃えて比較した方が確実です。
テキストボックスの書式に日付書式を設定していれば(例えば yyyy/mm/dd)、Date型の値が返りますが、
回答のコードは念のためにCDate関数でDate型に変換して、Date型の変数と比較しています。
If CDate(Me.[入力日付]) >= kaisi And CDate(Me.[入力日付]) <= owari Then
通報 ...