本ページには広告が含まれています。

ExcelVBA IsDate関数 日付型に変換可能かを判定する

ExcelVBA IsDate関数 日付型に変換可能かを判定する

Excel VBAの「IsDate 関数」について解説します。

スポンサーリンク

IsDate 関数とは

Excel VBA の IsDate 関数は、引数に指定した値が日付データとして認識できるかどうか(日付型 (Date) に変換できるかどうか)を判定するための関数です。判定結果は Boolean値で返します。

IsDate 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。

IsDate 関数(Visual Basic for Applications リファレンス)

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。

構文

IsDate(expression)

引数

引数 説明
expression【必須】評価する日付(式)または文字列(式)を指定します

※ 有効な日付範囲はOSによって異なり、Windowsなら西暦100年1月1日から9999年12月31日です。

戻り値

戻り値説明
ブール値
(Boolean)
引数が日付型 (Date) に変換可能なら 真 (True) を返し、
それ以外の場合は、偽 (False) を返します

※ 数値が指定された場合、IsDate 関数は False を返します。
※ 数値を日付に変換する場合 CDate 関数を使います。ただし、存在しない日付の数値だった場合には実行時エラーが発生してしまうのでその対処が必要です。

解説(使用例)

以下、サンプルコードで IsDate 関数の使用例を確認しましょう。

IsDate関数サンプル1(基本的な使用例)

IsDate の引数にいろいろ設定してみましょう。True になるもの False が返るものは何かを確認しましょう。

'■IsDate関数サンプル1(基本的な使用例)
Sub IsDate_Sample01()
'▼日付として認識される列(True)
  Debug.Print IsDate(#3/1/2024#)   '日付リテラル
  Debug.Print IsDate("2024/3/1")   'yyyy/m/d
  Debug.Print IsDate("2024/03/01")   'yyyy/mm/dd
  Debug.Print IsDate("24/3/1")   'yy/m/d
  Debug.Print IsDate("令和6年03月01日")  '和暦元号
  Debug.Print IsDate("R6/3/1")   '和暦元号略式
  Debug.Print IsDate("2024-3-1")   'ハイフン区切り
  Debug.Print IsDate("2024,3,1")   'カンマ区切
  Debug.Print IsDate("2024/3/1")   '全角文字
  Debug.Print IsDate("March,01,2024")  '英語型式
  Debug.Print IsDate("2024/03")  '年月のみ
    Debug.Print CDate("2024/03")   '2024/03/01 に変換される
  Debug.Print IsDate("03/01")  '月日のみ
    Debug.Print CDate("03/01")   '2024/03/01 に変換される

'▼日付として認識されない列(False)
  Debug.Print IsDate("2026/2/29")  '存在しない年月日
  Debug.Print IsDate("#3/1/2024#")   '文字列の日付リテラル
  Debug.Print IsDate("西暦2024/3/1")   '西暦の文字入
  Debug.Print IsDate("令和六年三月一日")   '漢数字
  Debug.Print IsDate("2024.3.1")   'ドット区切り
  Debug.Print IsDate("20240301")   '区切り無し
  Debug.Print IsDate("2024")   '年数字のみ
  Debug.Print IsDate("令和6年")  '和暦の年のみ
  Debug.Print IsDate("R06")  '和暦の略年のみ
     
'▼時刻として認識される例(True)
  Debug.Print IsDate("2021/01/21 12:00:00")  '日付+時刻
  Debug.Print IsDate("12:00:00")   '時:分:秒 [:]区切り
  Debug.Print IsDate("12時00分00秒")   '時分秒を表記
  Debug.Print IsDate("12時") '時刻のみ
    Debug.Print CDate("12時")  '12:00:00 に変換される
  
'▼時刻として認識されない例(False)
  Debug.Print IsDate("12;00;00")   '時;分;秒 [;]区切りの時刻
  Debug.Print IsDate("12,00,00")   '時,分,秒 [,]区切りの時刻
End Sub

コードを実行した際のイミディエイト画像は省略しています。

引数が数値の場合はすべて False になるのでサンプルには入れていません。

数値の文字列の場合も False です。(25行目と26行目の例)

15行目、17行目、35行目では CDate関数 で True 判定の文字列を日付データに変換しています。

IsDate関数サンプル2(判定結果で処理を分岐)

IsDate 関数の使いどころの基本は、変数が日付に変換できるかを判定してから処理を行うことです。
次の例では、入力テスト用に Do … Loop で継続して処理できるようにしています。

'■IsDate関数サンプル2(判定結果で処理を分岐)
Sub IsDate_Sample02()
  Dim Istr As String
'▼InputBox への入力値(文字列)を検査する
  Do
    Istr = InputBox("日付を入力してください:")
    If Istr = "" Then Exit Do '空白またはキャンセルで中止
    If IsDate(Istr) Then
      MsgBox """" & Istr & """ は有効な日付として認識できます。" & _
              vbCrLf & "CDate(""" & Istr & """)=" & CDate(Istr), _
              vbInformation
    Else
      MsgBox """" & Istr & """ は有効な日付として認識できません!", _
                  vbCritical
    End If
  Loop
End Sub

Inputboxを使って調べたい「日付」を入力できるようにしています。

IsDate関数サンプル2実行時のInputBox画像

入力された値(文字列)を IsDate 関数で日付または時刻として認識するかどうか確認します。

結果が True の場合、次のような MsgBox を表示します。

IsDate関数サンプル2実行時 Trueで表示されるMsgBox画像

2行目には CDate 関数で実際に変換した日付データも一緒に表示させています。

False だった場合はこちらの MsgBox を表示します。

IsDate関数サンプル2実行時 Falseで表示されるMsgBox画像

以上のように、IsDate 関数が True を返すときだけ CDate 関数で変換すると、実行時エラーの発生を防げます。

サンプルでは Do…Loopで繰り返すようにしていますが、実際には False の場合だけ再入力させ、True でループを抜けるようにすることが多いと思います。

おわりに

Excel VBA IsDate 関数は、引数に指定した値が日付型に変換可能かを判定し、結果を Boolean値(真の場合 True、偽の場合 False)で返します。

IsDate 関数の主な使いどころは、日付データを扱う際に値を CDate 関数で日付型に変換する前処理として利用されます。直接 CDate 関数で変換を実行させた場合、変換できない場合は実行時エラーになってしまうため、エラーをハンドリングする処理が必要になります。IsDate 関数であらかじめ変換可能かどうか判定することで、CDate 関数でのエラーを防ぐことができます。

ただし、IsDate 関数では引数が数値の場合は False を返しますが、CDate 関数では数値(シリアル値)を日付に変換できます。判定対象の引数が数値(シリアル値)の場合には IsDate 関数は使えませんので注意してください。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!