You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA按收货日期统计工作日求助:含循环、假日列表等问题

VBA批量统计工作日天数:下单到收货/当日,支持外部假日列表

需求概述

  • 统计**A列(下单日期)到C列(收货日期)**的工作日天数
  • 若C列未填写收货日期,自动统计至当日的工作日天数
  • 需批量处理多行数据

你尝试的代码

sub count()

    dim rd as boolean

    if range("c2").value +>1 then
        rd = true
    else
        rd = false

        if rd = true then
           range("b2").value = worksheetfunction.networkdays(range("a2"), range("c2"))
        end if
    end if
end sub

你的问题

  • 如何在NetworkDays函数中引用第二个工作表的假日列表
  • 如何实现多行数据的循环遍历
  • 收货日期未填写时的统计逻辑编写
  • 解决工作表对象引用的问题,确保日期统计准确

完整解决方案代码

Sub CalculateWorkDays()
    ' 定义工作表对象,明确操作目标
    Dim wsData As Worksheet
    Dim wsHolidays As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim startDate As Date
    Dim endDate As Date
    
    ' 指定数据工作表和假日列表工作表(根据你的实际表名修改)
    Set wsData = ThisWorkbook.Worksheets("订单数据")
    Set wsHolidays = ThisWorkbook.Worksheets("假日列表")
    
    ' 获取A列最后一行数据,确定循环范围
    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
    
    ' 从第2行开始循环(假设第1行是表头)
    For i = 2 To lastRow
        ' 获取当前行的下单日期
        startDate = wsData.Cells(i, "A").Value
        
        ' 确定结束日期:优先用收货日期,无则用当日
        If IsDate(wsData.Cells(i, "C").Value) Then
            endDate = wsData.Cells(i, "C").Value
        Else
            endDate = Date
        End If
        
        ' 计算工作日,引用假日列表(假日列表在wsHolidays的A列)
        On Error Resume Next ' 容错:处理日期格式错误的情况
        wsData.Cells(i, "B").Value = WorksheetFunction.NetworkDays(startDate, endDate, wsHolidays.Range("A:A"))
        On Error GoTo 0
    Next i
End Sub

问题逐一解决说明

1. 引用外部工作表的假日列表

在NetworkDays的第三个参数中直接指定假日列表的工作表和范围,示例中是wsHolidays.Range("A:A"),确保假日列表工作表的A列存储的是合法日期格式即可。

2. 批量遍历多行数据

  • 用wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row获取A列最后一行的行号,自动适配数据行数变化
  • 通过For i = 2 To lastRow循环遍历每一行数据,覆盖所有有效行

3. 未填写收货日期的统计逻辑

使用IsDate()函数判断C列单元格是否为有效日期:

  • 若为有效日期,将其作为结束日期
  • 若无效(未填写或格式错误),调用Date函数获取系统当日日期作为结束日期

4. 解决工作表引用问题

通过定义并指定Worksheet对象(wsData和wsHolidays),所有单元格操作都明确指向对应的工作表,避免了直接使用Range()时默认引用当前激活工作表的混乱问题,确保统计逻辑的准确性。


内容的提问来源于stack exchange,提问作者Benjamin Hegenderfer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:00:36