ビデオ: ExcelマクロVBA超入門講座(1) エクセルが自動で仕事する!?アニメでわかる、マクロ(VBA)プログラミング 2024
VBAのIsDate関数は、テキスト文字列を日付として解釈できるかどうかを示します。たとえば、次の式はすべてTrueと評価されます。
IsDate( "5/25/2015")IsDate( "January 16")IsDate( "12-1")IsDate( "12/1/15") IsDate( "2/30")IsDate( "30/2")
最後の2つの例では、IsDateは曜日と月の順序について不安定ではないことに注意してください。これらの文字列はどちらも日付として解釈される可能性があるため、IsDateはシステムの日付形式の設定に関係なくTrueを返します。
<! V98の日付関数IsDate、Format、CDate、およびCVDateは、OLEオートメーション(OleAut32.dll)にある関数を利用しています。この関数は、日付を表す文字列の分離された値のそれぞれをトークン化してすべての可能な日付形式を検索し、入力を日付として表すことができるかどうかを示すブール値を返します。<! - 2 - >
関数を使用して2桁の年を含む日付を解釈するときに覚えておくことは重要です。異なるロケールでは、さまざまな日付形式(mm / dd / yy、yy / mm / dd、
"" DD MMM YY " 、 " YY MMM DD " など)、この関数は、関数が有効な日付を見つけたり、すべての可能性を使い果たすまで、すべての位置で数字を試行します。 <! IsDateが文字列を日付として認識しているだけであっても、文字列を確実に日付に変換できるとは限りません。場合によっては、結果があいまいです。たとえば、この表現はどうですか? IsDate( "29-Feb-01")
2001年2月29日は有効な日付ではありません。ただし、この式は1929年2月1日(および1929年1月2日)が有効な日付なのでTrueを返します。そして、2029年と同じ日付です。IsDateのドキュメントの検索が空になりました。テストに基づいて、IsDateは区切り文字としてスラッシュ(/)、ハイフン( - )、コンマ(、)、ドット(。)、およびスペースのいずれかを受け入れます。
IsDate( "5、1")IsDate( "30 6")IsDate( "30、6")IsDate( "1/2")
しかし、
IsDate( "5.1 5")IsDate( "5。1. 05")
ただし、明示的にこの式はFalseを返します。
IsDate ( "5. 1. 2005")
ユーザーが日付を入力するInputBoxを持つUserFormを作成したとします。エントリを検証するためにIsDateを使用することはあまり信頼性がありません。
IsDateが時間値にも対応していることが分かったら、さらに混乱します。 IsDate( "4:45")IsDate( "4 45")IsDate( "4 45")IsDate( "4 45")IsDate( "4 45")IsDate ")IsDate(" 23:59 ")
これらの式はFalseを返します。
IsDate(" 4:60 ")IsDate(" 24.45 ")
IsDateはRange引数を渡すと、これらのすべての癖があります。たとえば、次のようになります。
IsDate(Range( "A1"))
IsDateは、日付または時刻を含むセルの識別に完全に信頼できると思われます。例えば、日付として5.1を含むセルを特定することはできません。文字列を日付として解釈できるかどうかをコードで判断する必要がある場合は、その文字列をセルに格納し、セル内容をチェックするコードを記述するのが最善の解決策です。