参照セルが日付かどうかを検査するExcelの論理式

参照セルが日付かどうかを検査するExcelの論理式

Excelでセルに入力されているデータが日付であるかどうかを判別する方法を紹介します。VBAにはIsDate 関数がありますが、標準ワークシートにはないので代替手段を用います。

これには、CELL関数と論理演算子を組み合わせて使用する方法があります。今回は、特定のセルが日付かどうかを検査するための論理式について詳しく解説します。

日付かどうかを検査する論理式やIF関数

以下の論理式を使用すると、参照セルが日付かどうかを判別できます。

=AND(LEFT(CELL("format", 参照セル), 1)="D", 参照セル>=1, 参照セル<=2958465)

「参照セル」をセルA1とするならば以下の式になります。

=AND(LEFT(CELL("format", A1), 1)="D", A1>=1, A1<=2958465)

「参照セル」の指定を一度で済ますならば以下の式になります。

=LET(_CeAd,参照セル,AND(LEFT(CELL("format", _CeAd), 1)="D", _CeAd>=1, _CeAd<=2958465))

この式は、参照セルの書式コードが日付形式であり、セルの値がExcelの日付範囲内であるかどうかを確認します。


IF関数を用いて参照セルが日付の場合に「日付である」、日付でなければ「日付ではない」と返すならば以下の式になります。

=IF(AND(LEFT(CELL("format", 参照セル), 1)="D", 参照セル>=1, 参照セル<=2958465),"日付である","日付でない")

「参照セル」の指定を一度で済ますならば以下の式になります。

=LET(_CeAd,参照セル,IF(AND(LEFT(CELL("format", _CeAd), 1)="D", _CeAd>=1, _CeAd<=2958465),"日付である","日付でない"))

論理式の構造

この論理式は、以下のように各部分に分解できます。

=AND(LEFT(CELL("format", 参照セル), 1)="D", 参照セル>=1, 参照セル<=2958465)
  • CELL(“format”, 参照セル): CELL関数で参照セルの書式コードを取得します。CELL関数の第一引数に”format”をセットすると、参照セルが日付や時刻の場合にDで始まる文字列を返します。

  • LEFT(CELL(“format”, 参照セル), 1)=”D”: LEFT関数で、書式コードの先頭1文字が「D」であるかどうかを確認します。これにより、日付形式であるかどうかを判断します。

  • 参照セル>=1, 参照セル<=2958465: セルの値が1以上2958465以下であることを確認します。これにより、Excelの日付・時刻範囲内(最小0最大2958465)であり、文字列でないことを判断します。また0~1は時刻の範囲であるため、時刻のみでなく「1900/1/1以降」の日付データであることも判別できます。
  • AND: AND関数で条件を結合することで、すべての条件がTRUEである場合にTRUEを返します。

この論理式を使用することで、セルの値が1から2958465の範囲内であり、かつ書式が「D」で始まる場合にのみ、セルが日付であることを確認できます。これにより、Excelでセルの内容が日付かどうかを高い精度で判別することができます。

具体的な使用例

以下の具体例を用いて、この論理式の使用方法を説明します。

例1: セルA1が日付の場合

セルA1に「2023/06/15」という日付が入力されている場合、セルB1に以下の計算式を入力します。この計算式は、TRUEを返します。

=AND(LEFT(CELL("format", A1), 1)="D", A1>=1, A1<=2958465)

IF関数を用いて、A1が日付の場合に「○」を返すならば以下の式になります。

=IF(AND(LEFT(CELL("format", A1), 1)="D",A1>=1,A1<=2958465),"○","×")

例2: セルA1が時刻の場合

セルA1に「12:00」という時刻が入力されている場合、前述の計算式は、FALSEを返します。

例3: セルA1が文字の場合

セルA1に「東京都」という文字が入力されている場合、前述の計算式は、FALSEを返します。

例4:条件付き書式への利用

「A列が日付データならば行を塗りつぶす」のような設定をするならば「数式を使用して、書式設定するセルを決定」欄に式を設定します。この場合は参照セルの列番号を絶対参照させます。

=AND(LEFT(CELL("format", $A1), 1)="D", $A1>=1, $A1<=2958465)

 

 

コメント