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