Excelには、セルの内容に応じてTrueまたはFalseを返す関数がいくつか用意されています。たとえば、セルが空の場合はISBLANKがTrueを返し、セルにエラー値が含まれている場合はISERRがTrueを返し、セルにテキストが含まれている場合はISTEXTがTrueを返します。セルに時間が含まれているかどうかを判断できるかどうか疑問に思うかもしれません。

簡単な答えはノーです。できません。Excelには、セルに時間が含まれているかどうかを示す関数がありません。理由は非常に単純です。Excelの時刻と日付は技術的には数字にすぎません。日付は、1から2958465の範囲の任意の数値で、1900年1月1日から9999年12月31日までの日付を表します。数値に小数部分を追加すると、それは時間を表します(0は深夜、0.25は午前6:00、0.5は正午など)。

日付と時刻に使用できる値の範囲と、時刻を含むセルを適切にフォーマットして時刻を表示する必要があるという事実を知っていると、セルに時刻が含まれているかどうかを示す数式を作成できます。

=IF(AND(CELL("format",B2)>="D6",CELL("format",B2)<="D9"), "Time Format","Not Time Format")

|||この数式は、セルB2に適用されている書式をチェックします。書式設定が時間に一般的に使用される形式の1つである場合、「時刻形式」というテキストが返されます。別のフォーマットが使用されている場合、数式は「時間フォーマットではない」を返します。

別のアプローチは、セルB2の値が有効な時間値であるかどうかを確認することです。次のような式を使用してこれを行うことができます:

=IF(TIMEVALUE(TEXT(B2,"hh:mm:ss"))=B2, "Time Entry", "Not a Time Entry")

セルB2に時間が含まれている限り、この関数は正常に機能します。セルに日付と時刻の両方が含まれている場合、関数は常に「時間エントリではありません」を返します。

セル内の形式と値を確認するという両方の長所を活用するには、VBAでユーザー定義関数を作成することを検討してください。理由は単純です。VBAには、数値の現在の範囲を調べるだけでなく、セルが日付としてフォーマットされているかどうかを確認するIsDate関数が含まれています。次のマクロは、このような関数を作成する方法の例を示しています。

Function IsTime(rng As Range) As Boolean     Dim sValue As String     sValue = rng.Cells(1).Text     On Error Resume Next     IsTime = IsDate(TimeValue(sValue))

On Error GoTo 0 End Function

この関数を使用するには、セルで次の数式を使用します。

=IsTime(B2)

この関数は、(セルオブジェクトのtextプロパティを使用して)値がどのように表示されるかを読み取り、TIMEVALUE関数を使用して値を変換しようとします。それが日付(IsDate関数によって決定される)である場合、表示は有効な時刻です。日付でない場合、VBAはエラーを生成しますが、コードはそれを無視するようにプログラムされています。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(9699)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excel-Checking_for_Time_Input [時間入力の確認]