VBA 将星期六和星期日替换为下星期一的工作日和工作日
VBA Weekday and Workday to replace Saturday and Sunday with next Monday
小问题:我有一个小的 vba 脚本,它根据多种条件用日期填充一系列单元格。我想采用这个日期范围,并将周末的日期替换为下周一。我正在尝试使用 Weekday
和 Workday
来执行此操作(请假设所有变量都已正确定义):
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
其中 lngDayIndex
是 Weekday
函数的 return。
代码示例:
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 support webpage,Weekday
函数date
参数可以是:
...Variant, numeric expression, string expression, or any combination of these that can represent a date. If date contains Null, Null is returned.
所以你可以使用:
Weekday(Now())
还有,例如:
WeekDay("2017-10-25", vbMonday)
根据您的区域设置,您只需确保任何文本值实际上都能正确转换为日期。
小问题:我有一个小的 vba 脚本,它根据多种条件用日期填充一系列单元格。我想采用这个日期范围,并将周末的日期替换为下周一。我正在尝试使用 Weekday
和 Workday
来执行此操作(请假设所有变量都已正确定义):
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
其中 lngDayIndex
是 Weekday
函数的 return。
代码示例:
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 support webpage,Weekday
函数date
参数可以是:
...Variant, numeric expression, string expression, or any combination of these that can represent a date. If date contains Null, Null is returned.
所以你可以使用:
Weekday(Now())
还有,例如:
WeekDay("2017-10-25", vbMonday)
根据您的区域设置,您只需确保任何文本值实际上都能正确转换为日期。