在VBA宏中使用WORKDAY

时间:2018-05-29 20:06:07

标签: excel vba

我试图在自动填充列的VBA宏中使用WORKDAY函数。我环顾四周,尝试了一些变化,结果喜忧参半,没有一个完全符合我的需要。

我需要代码来确定单元格(第I列)是否为空,如果是,则根据单元格中的日期(列H)确定上一个工作日。我到目前为止的代码是:

Dim rng As range

Set rng = range("I3", Cells(Rows.Count, "I").End(xlUp))

For Each cell In rng
'
    If cell.Value = "" Then
        cell.Value = "=WORKDAY(""H3"",-1)"
    End If
    Next
End Sub

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

为了将来参考,宏录制器非常擅长为这类东西提供参考代码。你可能想要这样的东西:

Dim rng As range

Set rng = range("I3", Cells(Rows.Count, "I").End(xlUp))

rng.cells(1,1).Formula = "=IF(H3="""","""",WORKDAY(H3,-1))"
rng.cells(1,1).AutoFill Destination:=Range("J2:J6"), Type:=xlFillDefault

这样做就像你将公式(在常规Excel中)拖到rng中的所有单元格一样

答案 1 :(得分:0)

您将cell.Value = "=WORKDAY(""H3"",-1)"更改为cell.Formula= "=WORKDAY(""H3"",-1)"

或使用:cell.Value = WorksheetFunction.WorkDay(Range("H3").Value, -1)

答案 2 :(得分:0)

如果您只需要值而不是单元格中的公式,则可以使用:

cell.Value = Application.WorksheetFunction.Workday(Range("H3"),-1)

...并循环遍历您需要放置值的单元格。

如果你想要公式:

cell.Formula = "=WORKDAY(""H3"",-1)"

...再次,遍历您需要的单元格。

这些假设您的函数在工作表上正常工作。