Excel VBA - 范围是否包含/包含日期

时间:2016-06-10 12:33:32

标签: vba excel-vba date find range

我正在寻找一个解决方案,以检查某个范围(在我的情况下是整行)是否包含任何日期值。因此,只要求某个日期的查找等方法不符合我的利益。

我已经尝试了IsDate(Cells(x, y).Value)IsDate(Range("xy")),它只适用于一个单元格进行检查,但不幸的是,它不仅仅适用于一个单元格。

我也尝试了以下内容:

If IsDate(Sheets("test").Range(Cells(7, 2), Cells(7, 3)).Value) Then
    MsgBox ("works")
End If 

并且两个单元格都是日期,并且仅通过检查单个单元格与IsDate一起使用。

有人可以帮我解决这个问题吗? 如何检查整行是否包含任何日期值? 请尝试不用循环遍历每个单元格。

2 个答案:

答案 0 :(得分:0)

尝试

For Each cell In Range("A1:D3")
       If IsDate(cell.Value) Then MsgBox cell.Value 
next

编辑:对不起我没有循环阅读...但也许有人使用我的方法

答案 1 :(得分:0)

您无法检查整个范围以查看它是否包含日期,这是不可能的,必须逐个单元格完成,但可以通过退出第一个肯定答案来减少它。

考虑以下单元格: -

' |A      |B              |C
'1|This   |10/June/2016   |Date is 10/06/16

一次尝试处理它们会问This10/June/2016Date is 10/06/16约会?答案是否定的。

A1不是日期

B1是日期

C1不是日期(它包含日期,但被视为字符串,因为它的内容也不是日期)

我们必须逐一检查它们以隔离我们正在检查的内容。

我假设你的问题,你不需要任何进一步的信息,而不是“是这个范围内有一个日期”(即你不需要知道在哪里)。这只能通过循环来实现: -

Public Sub Sample()
Dim WkSht           As Worksheet
Dim Rng             As Range
Dim Cl              As Range
Dim BlnContainsDate As Boolean

'Connect to worksheet
Set WkSht = ThisWorkbook.Worksheets("Sheet1")

    'Define a range to check
    Set Rng = WkSht.Range("A2:J2")

        'Check each cell
        For Each Cl In Rng.Cells

            'Its there is a date in any of them, flag it and stop checking
            If IsDate(Cl.Value) Then
                BlnContainsDate = True
                Exit For
            End If

        Next
    Set Rng = Nothing
Set WkSht = Nothing

End Sub

如果你希望它看起来不像一个循环你可以像子程序一样调用它并得到一个结果: -

Public Sub Sample()
Dim WkSht           As Worksheet

'Connect to worksheet
Set WkSht = ThisWorkbook.Worksheets("Sheet1")

    'Send a range to be checked
    Debug.Print ContainsADate(WkSht.Range("A2:J2"))

Set WkSht = Nothing

End Sub

Private Function ContainsADate(ByVal Rng As Range) As Boolean

'Check each cell we were passed
For Each Cl In Rng.Cells

    'Its there is a date in any of them, flag it and stop checking
    If IsDate(Cl.Value) Then
        ContainsADate = True
        Exit For
    End If

Next

End Function