我正在构建一个宏,它将比较AO列中的日期(日期格式为dd/mm/yyyy hh:mm)与列AL中的日期(日期格式为dd/mm/yyyy hh:mm),并将它们在工作日中的差异打印到列中(仅显示天数,而不是分钟数等)。我已经搜索并发现NETWORKDAYS是excel中的一个函数,它可以做到这一点,但我不知道如何在VBA中实现它的范围。到目前为止,我的代码与我在web上找到的代码非常相似,但它是针对特定日期的,而不是针对某个范围的。有什么想法吗?非常感谢!
到目前为止,我得到的是这样的,但它显示与d1=cell.Offset一致的错误...我现在不知道为什么!
Dim d1 As Range, d2 As Range, wf As WorksheetFunction
'Dim N As Long
Set wf = Application.WorksheetFunction
For Each cell In Range(Range("AT2"), Range("AT2").End(xlDown))
Set d1 = cell.Offset(0, -4)
Set d2 = cell.Offset(0, -7)
cell.Value = wf.NetworkDays(d1.Value2, d2.Value2)
Next cell
发布于 2017-08-26 11:03:00
我建议使用“混合”方法,因为您无论如何都要使用工作表函数:让VBA填充函数,将输出替换为值:
Sub WorkDaysDiff()
' w-b 2017-08-26
Dim rng As Range, lastrow As Long
' assuming columns A, B hold dates, results into column C
lastrow = ActiveSheet.Range("A1").End(xlDown).Row
With ActiveSheet
Set rng = .Range(.Range("C1"), .Range("C" & lastrow))
End With
With rng
' write formula into worksheet cells for whole range at once
' and replace it with their value after recalculation
.FormulaR1C1 = "=NETWORKDAYS(RC[-1],RC[-2])"
.Copy
.PasteSpecial xlPasteValues
Application.CutCopyMode = False
End With
End Sub
这样,您就避免了循环,如果范围足够大,这可能会节省时间。
发布于 2017-08-25 21:14:11
为此,您不需要使用VBA。它也可能是一个VBA函数,我不确定。
发布于 2017-08-25 21:34:09
试试这个
Dim d1 As Date, d2 As Date
For Each Cell In Range(Range("AT2"), Range("AT2").End(xlDown))
d1 = Cell.Offset(0, -4)
d2 = Cell.Offset(0, -7)
Cell.Value = Application.WorksheetFunction.NetworkDays(d1, d2)
Next Cell
https://stackoverflow.com/questions/45889438
复制相似问题