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

时间:2014-01-27 11:13:00

标签: excel excel-vba 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)
'RESTART THE LOOP AND CHECKS
Else

'IS NOT A BANK HOL CONTINUE CHECK

End If
Next bhday

显然这不会以第一个值开始循环,我该怎么做呢?

由于

2 个答案:

答案 0 :(得分:0)

您可以将假期数据库放在工作表中,然后获取日期并使用错误处理程序使用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

答案 1 :(得分:0)

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

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

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