我正在寻找一个解决方案,以检查某个范围(在我的情况下是整行)是否包含任何日期值。因此,只要求某个日期的查找等方法不符合我的利益。
我已经尝试了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
一起使用。
有人可以帮我解决这个问题吗? 如何检查整行是否包含任何日期值? 请尝试不用循环遍历每个单元格。
答案 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