2

我正在尝试查找某个日期是否在某个日期范围内。这是日期范围:

01/01/2013
11/02/2013
29/03/2013
20/05/2013
01/07/2013
05/08/2013
02/09/2013
14/10/2013
11/11/2013
25/12/2013
26/12/2013

这是VBA代码:

  ' Format Holiday Rows '
        With ConfigData.Range("B8:B18")
            Set holidays = .Find(s1.Cells(row_count, 1))

            If Not holidays Is Nothing Then
                MsgBox s1.Cells(row_count, 1)
            End If
        End With

在上面的代码中,弹出的第一个 MsgBox 显示为“11/01/2013”​​。这绝对没有意义,因为该值不在范围内。

注意:ConfigData.Range("B8:B18") 指的是上面显示的日期范围。

另外:此代码在增加 s1.Cells(row_count, 1) 值的 for 循环中。从 2013 年 1 月 1 日至 2013 年 12 月 31 日

4

4 回答 4

2

如果您只想确认系列中的日历日是否在假期列表中,那么您甚至可以使用vlookup

Dim strFound As String

On Error Resume Next
strFound = Application.Vlookup(s1.Cells(row_count, 1), .Range("B8:B18"), 1, 0)
If IsError(strFound) Then
   MsgBox "Not Found"
Else
'-- Found
End If
On Error GoTo 0
于 2013-01-22T00:51:47.507 回答
0

需要注意的是,excel 使用美国日期格式。即 mm/dd/yyyy,因此要让 .Find() 函数正常工作可能有点棘手。确保您的变量格式正确,以便 excel 能够为您提供所需的内容:

Dim strdate As String
Dim aCell As Range

strdate = ActiveSheet.Cells(1,1)
strdate = Format(strdate, "Short Date")
On Error Resume Next
    Set aCell = Cells.Find(What:=CDate(strdate), After:=Range("A1"), LookIn:=xlFormulas , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

If rCell Is Nothing Then
    MsgBox("Date cannot be found. Try Again")
End If
End Sub

当然,日期格式可能会发生很多烦人的事情,但这是假设您要查找的日期为“短日期”格式。

于 2013-08-13T21:21:36.330 回答
0

以下代码适用于我:

Sub thing()

    Dim cell As Range, _
        holidays As Range

    For Each cell In Range("D1:D365")
        With Range("A1:A11")
            Set holidays = .Find(cell.Value, LookIn:=xlValues, lookat:=xlWhole)

            If Not holidays Is Nothing Then
                Debug.Print cell.Value
            End If
        End With
    Next cell

End Sub

如果这不起作用,我建议您可能有单元格格式问题。选择您的日期单元格之一。转到即时窗口(Alt+F11,然后在 Excel 中按 Ctrl+G),键入? Selection.Value2并按 Enter。这会返回一个数值(~41000)吗?

或者,您可以在全新的工作表中重新输入日期(手动输入第一对并向下拖动,不要复制和粘贴,因为格式也会被复制)然后重试。这至少应该消除作为潜在问题的奇怪格式。

于 2013-01-21T23:06:59.223 回答
0

'要在工作表的其他地方查找与参考单元格具有相同特定日期的单元格: '首先将所有日期复制到紧靠其左侧的单元格中。'将复制的单元格格式化为“常规”'运行此代码 - 然后使用 dateRow 和 DateCol 变量(例如在 vlookup 中)'在 Excel 2013 中工作(不得隐藏“常规”列 - 通过背景颜色的格式隐藏)

Dim dateVal
Dim DateRow
Dim DateCol

dateVal = Range("j8").Value 'must be in general format

Cells.Find(What:=dateVal, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Activate

DateRow = ActiveCell.Row
DateCol = ActiveCell.Column

MsgBox (DateRow & "   " & DateCol)

End Sub
于 2016-05-15T12:06:14.677 回答