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

如何用VBA循环将各日期工作簿的MAXIFS结果汇总到主工作簿

批量汇总日期工作簿最晚时间到主工作簿的VBA方案

前置准备

  • 确保所有日期命名的工作簿(如Workbook_20230505.xlsx)和主工作簿放在同一个文件夹中
  • 主工作簿设置:A列为日期值(格式与工作簿名称中的日期一致,如20230505),B列用于存放汇总的最晚时间

VBA实现代码

按下Alt+F11打开VBA编辑器,插入模块后粘贴以下代码:

Sub BatchSummarizeLatestTime()
    Dim mainWB As Workbook
    Dim sourceWB As Workbook
    Dim sourceWS As Worksheet
    Dim folderPath As String
    Dim fileName As String
    Dim targetDate As String
    Dim targetRow As Long
    Dim lastRow As Long
    Dim latestTime As Variant
    
    ' 设置主工作簿和文件夹路径
    Set mainWB = ThisWorkbook
    folderPath = mainWB.Path & "\"
    
    ' 遍历文件夹中所有符合命名规则的工作簿
    fileName = Dir(folderPath & "Workbook_*.xlsx")
    Do While fileName <> ""
        ' 提取工作簿名称中的日期(如从Workbook_20230505.xlsx中提取20230505)
        targetDate = Mid(fileName, 10, 8) ' 从第10位开始取8位,对应日期部分
        
        ' 打开源工作簿
        Set sourceWB = Workbooks.Open(folderPath & fileName)
        ' 假设数据在Sheet1,可根据实际修改工作表名称
        Set sourceWS = sourceWB.Worksheets("Sheet1")
        
        ' 获取数据区域的最后一行(避免固定范围的局限性)
        lastRow = sourceWS.Cells(sourceWS.Rows.Count, "B").End(xlUp).Row
        
        ' 计算排除SYSTEM和VOID的最晚时间
        On Error Resume Next ' 处理无符合条件数据的情况
        latestTime = Application.WorksheetFunction.MaxIfs( _
            sourceWS.Range("B3:B" & lastRow), _
            sourceWS.Range("C3:C" & lastRow), "<>SYSTEM", _
            sourceWS.Range("C3:C" & lastRow), "<>VOID" _
        )
        On Error GoTo 0
        
        ' 在主工作簿中查找对应日期的行
        On Error Resume Next
        targetRow = mainWB.Worksheets("Sheet1").Columns("A").Find( _
            What:=targetDate, LookIn:=xlValues, LookAt:=xlWhole _
        ).Row
        On Error GoTo 0
        
        ' 如果找到对应行,写入结果
        If targetRow > 0 Then
            mainWB.Worksheets("Sheet1").Cells(targetRow, "B").Value = latestTime
        End If
        
        ' 关闭源工作簿(不保存)
        sourceWB.Close SaveChanges:=False
        
        ' 获取下一个工作簿
        fileName = Dir()
    Loop
    
    MsgBox "汇总完成!"
End Sub

关键说明

  • 动态数据范围:代码中用lastRow获取Time列的最后一行,替代固定的B13,适配不同行数的数据源
  • 日期提取:Mid(fileName,10,8)是针对Workbook_YYYYMMDD.xlsx的命名规则,若你的命名格式不同(如20230505_Workbook.xlsx),需调整参数
  • 错误处理:加入On Error Resume Next避免因无符合条件数据或日期不存在导致程序崩溃
  • 工作表名称:代码中默认使用Sheet1,需根据实际工作表名称修改主工作簿和源工作簿的表名

使用方法

  1. 保存主工作簿为启用宏的工作簿(.xlsm格式)
  2. 运行上述宏即可自动遍历所有日期工作簿,完成汇总

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:27