web-dev-qa-db-ja.com

Excelの日付セルが空かどうかを確認するにはどうすればよいですか?

このように感じるのは本当に簡単なはずですが、セルの値を再度取得しないと機能しません。

まず、2つの日付セルがあります。

Dim agreedDate As Date
Dim completedDate As Date

THIS WORKS ..(ただし、乱雑に見えます)

agreedDate = Worksheets("Data").Cells(Counter, 7).Value
completedDate = Worksheets("Data").Cells(Counter, 9).Value

If (IsEmpty(Worksheets("Data").Cells(Counter, 7).Value) = True) Or (IsEmpty(Worksheets("Data").Cells(Counter, 9).Value) = True) Then

[.. do stuff]
End If

これは機能しません-なぜ機能しませんか?!

agreedDate = Worksheets("Data").Cells(Counter, 7).Value
completedDate = Worksheets("Data").Cells(Counter, 9).Value

If (IsEmpty(agreedDate) = True) Or IsEmpty(completedDate) = True) Then

[.. do stuff]
End If

Ifステートメントをクリーンで簡単な方法で書く方法はありますか?

8
Malin

空にできるのはバリアント型の変数のみなので、日付型には別のテストが必要です。

ゼロを確認します。

If agreedDate = 0 Or completedDate = 0 Then

しかし、より安全な方法は、変数をバリアント型に変更してから、次のテストを行うことです。

If IsDate(agreedDate) = False Or IsDate(completedDate) = False Then
9
Excel Hero

IsEmpty関数 は、指示された変数が初期化されているかどうかを決定します。セルが本当に空白の場合、IsEmptyの観点から、セルは初期化されていないと見なされます。ただし、VBAで変数を宣言すると、デフォルト値が与えられます。この場合、日付タイプの変数は基本的にまたは-Dec-1899 00:00:であり、次の短いスニペットで示されています。

Sub date_var_test()
    Dim dt As Date
    Debug.Print Format(dt, "dd-mmm-yyyy hh:mm:ss")
End Sub

コードを「整理」したい場合は、IsEmpty関数の真のブール値を返すことで、ブール条件をTrueと比較するのではなく解決できるようにすることもできます。

If IsEmpty(Worksheets("Data").Cells(Counter, 7)) Or IsEmpty(Worksheets("Data").Cells(Counter, 9)) Then
    [.. do stuff]
End If

Falseが(すべての意図と目的に対して)ゼロであるとすると、これは日付型変数に対して機能します。

If Not (agreedDate or completedDate) Then
    [.. do stuff]
End If
3
user4039065

Excelヒーローが指摘したように、日付変数は空にできません。実際、日付変数は数値なので、このようなことができるはずです。また、以下のコードは「Value2」を使用していることに注意してください。

Sub test()
    Dim d As Date
    d = Range("A1").Value2
    If d = 0 Then
      MsgBox "ok"
    Else
      MsgBox "not ok"
    End If
End Sub
1
u8it