我确定我错过了一些简单的事情。
我有一个日期,我想要与银行假期列表进行比较,如果日期在列表中,那么从日期起减去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
显然这不会以第一个值开始循环,我该怎么做呢?
由于
答案 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”)将是您输入日期之后的第一个日期)