VBA循环 – 检查银行假期 – 如果它然后重新启动循环

我确定我错过了一些简单的事情。

我有一个date,然后我想比较一个银行假期列表,如果date在列表中,那么从date减去1天,并重新检查从列表开始的date。

我到目前为止:

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 

显然这不是在第一个值开始循环,我怎么去做呢?

谢谢

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

http://office.microsoft.com/en-gb/excel-help/workday-HP005209339.aspx

你可以插入你的date在一个单元格,然后有假期列表。 然后只需使用工作日function。 设置1为“days”参数,如果是假期(或者周末,在许多情况下也是有用的),那么它将显示不同的结果(需要略微调整以使其前面的date注册为“1”将是您inputdate之后的第一个date)

您可以将假期数据库放在工作表中,然后获取date并使用error handling程序使用workbookfunction.match()环绕。 就像是:

 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