首页 文章

Networkdays VBA中单元格范围的函数

提问于
浏览
1

我正在构建一个宏,它将比较AO列中的日期(日期格式为dd / mm / yyyy hh:mm)和AL列中的日期(日期格式为dd / mm / yyyy hh:mm),它将打印出它们之间的差异 . 工作日到列AS(只是天数,而不是分钟等)我搜索过并发现NETWORKDAYS是excel中的一个函数,但是我不知道如何在VBA中实现它 . 到目前为止,我的代码非常类似于我在网络上找到的代码,但它适用于特定日期,而不适用于范围 . 有任何想法吗?非常感激!

到目前为止,我有这个,但它说有一个错误符合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

4 回答

  • 1

    我建议采用'混合'方法,因为你要使用工作表函数:让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
    

    这样,您可以避免循环,如果范围足够大,可以节省时间 .

  • 0

    你不确定't need VBA for this. It may also be a VBA function, I' .
    enter image description here

  • 0

    试试这个

    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
    
  • 0

    如果要使用列AL和AO,并将结果放在AS中 - 范围由AT中的内容确定 - 请使用以下命令:

    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, -5)
    Set d2 = cell.Offset(0, -8)
    cell.Offset(0, -1).Value = wf.NetworkDays(d1.Value2, d2.Value2)
    Next cell
    

相关问题