Excel VBA循环-检查银行假日-如果是,则从头开始重新启动循环

Excel VBA循环-检查银行假日-如果是,则从头开始重新启动循环,excel,vba,Excel,Vba,我肯定我错过了一些简单的东西 我有一个日期,然后我想将其与银行假日列表进行比较,如果该日期在列表中,则从该日期减去1天,然后从列表开始重新检查该日期 到目前为止,我有: For Each bhday In Sheets("testsheet").Range("$A$2:$A$" & Cells(Rows.Count, "A").End(xlUp).Row) If testday= bankhol Then tesday= DateAdd("d", -1, testday) 'RESTA

我肯定我错过了一些简单的东西

我有一个日期,然后我想将其与银行假日列表进行比较,如果该日期在列表中,则从该日期减去1天,然后从列表开始重新检查该日期

到目前为止,我有:

For Each bhday In Sheets("testsheet").Range("$A$2:$A$" & Cells(Rows.Count, "A").End(xlUp).Row)

If testday= bankhol Then
tesday= DateAdd("d", -1, testday)
'RESTART THE LOOP AND CHECKS
Else

'IS NOT A BANK HOL CONTINUE CHECK

End If
Next bhday
很明显,这不会从第一个值开始循环,我该怎么做呢


谢谢

您可以将假日数据库放在一张工作表中,然后获取日期并使用
workbookfunction.match()
around with Error handler。比如:

On Error Resume Next
value = WorksheetFunction.Match(testday, Sheets("BD").[A:B], 0)
On Error GoTo 0
编辑:

如果你把一个公式放在一个单元格里可能会更容易。例如:

Set HelpCell = .Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 1)
With HelpCell
  .Formula = "=MATCH(" & bhday & ",Holiday_BD!A:A,0)"
  testDay = .Value
  .ClearContents
End With
或者只是:

With Range("A1")
  .Formula = "=MATCH(" & bhday & ",Holiday_BD!A:A,0)"
  testDay = .Value
  .ClearContents
End With

如果没有理由不能使用
WORKDAY()
excel函数,那么这可能是一种更简单的方法


您可以在单元格中插入日期,然后创建假日列表。然后使用workday函数。将1设置为“days”参数,如果它是假日(或周末,在许多情况下也很有用),那么它将显示不同的结果(需要稍微调整以使其注册之前的日期,因为“1”将是输入日期之后的第一个日期)

您能给出一个例子吗?如果它出错,我认为这是列表中找不到值的地方?抱歉@user3219693<代码>匹配()搜索所选参数范围内的值。如果未找到该值,则返回错误。这就是为什么我用错误处理程序来包围它。