VBA工作日和工作日将周六和周日替换为下周一



快速问题:我有一个小的 vba 脚本,它根据许多条件用日期填充一系列单元格。 我想采用这个范围的日期,并将周末的任何日期替换为下周一。 我正在尝试使用WeekdayWorkday来执行此操作(请假设所有变量都已正确定义):

i = 6
For i = 6 to LastRow
    If Weekday(Cells(i, "I"), vbMonday) > 5 Then
        Cells(i, "I") = Application.WorksheetFunction.Workday(Cells(i, "I"), 1, 1)
    End If
Next i

据我所知,Weekday旨在接受日期,而不是单元格引用。 我不确定如何在 for 循环中将日期传递给它。 有什么建议吗?

您可以通过将

任何星期六增加 +2 或将星期日增加 +1 来执行此操作。因为星期六 = 6 和星期日 = 7,如果你对 Weekday 函数使用 vbMonday 参数),那么这将起作用:

7 - lngDayIndex + 1

其中lngDayIndexWeekday函数的返回。

代码示例:

Sub ConvertToNextMonday()
    Dim ws As Worksheet
    Dim lngLastRow As Long, lngCounter As Long, lngDayIndex As Long
    Set ws = ThisWorkbook.Worksheets("Sheet2") '<-- change to your sheet
    lngLastRow = ws.Cells(ws.Rows.Count, "I").End(xlUp).Row '<-- change to your column
    For lngCounter = 1 To lngLastRow
        lngDayIndex = Application.WorksheetFunction.Weekday(ws.Cells(lngCounter, "I").Value, vbMonday)
        If lngDayIndex = 6 Or lngDayIndex = 7 Then
            ws.Cells(lngCounter, "I") = ws.Cells(lngCounter, "I") + (7 - lngDayIndex + 1)
        End If
    Next lngCounter
End Sub

根据 Office 支持网页,date参数的Weekday函数可以是:

。变体、数值表达式、字符串表达式或可以表示日期的这些表达式的任意组合。如果日期包含 Null,则返回 Null。

因此,您可以使用:

Weekday(Now())

而且,例如:

WeekDay("2017-10-25", vbMonday)

您只需要确保根据您的区域设置,任何文本值实际上都会正确转换为日期。

最新更新