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

VBA按日期条件匹配插入区间数据的脚本修改咨询

VBA脚本修改方案

核心调整逻辑

  • 提取数据源文件的最小日期:打开CSV文件后读取数据区域首行(即第二行,首行是表头)的A列日期,作为覆盖的起始匹配值
  • 定位主表粘贴起点:在主表A列搜索上述起始日期,匹配到的行号作为粘贴起始位置
  • 兼容边界场景:如果主表未匹配到对应起始日期,自动将数据追加到现有数据末尾
  • 优化原有代码冗余操作:移除不必要的Activate、Select调用,降低运行异常概率

调整后完整代码

Sub Code()
    Dim wb1 As Workbook
    Dim raspuns As String
    Dim FSO As Object, fld
    Dim dtLastRun As Date
    Dim dtSourceStart As Date ' 数据源起始日期
    Dim pasteStartRow As Long ' 主表粘贴起始行
    Dim sourceRng As Range ' 数据源待复制范围
    Dim mainSht As Worksheet, sourceSht As Worksheet
    Dim findRng As Range
    
    Const FOLDER_PATH = "\\emag.local\ro\Financial\Controlling&Reporting\Reporting\6_Marketing\FY_2021\Budget\RO\Drivers\Input Daily Reports"
    
    Application.ScreenUpdating = False
    Set mainSht = ThisWorkbook.Worksheets("PPV")
    
    ' 获取上次运行日期
    dtLastRun = mainSht.Range("A" & Rows.Count).End(xlUp).Value
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    For Each fld In FSO.getfolder(FOLDER_PATH).SubFolders
        If (fld.Name > Format(dtLastRun, "yyyy_mm_dd")) And _
           (fld.Name <= Format(Now, "yyyy_mm_dd")) Then
            
            Set wb1 = Workbooks.Open("\\" & fld & "\PPV.csv")
            Set sourceSht = wb1.Worksheets("PPV")
            
            ' 定位数据源待复制范围
            Set sourceRng = sourceSht.Range("A2", sourceSht.Range("A2").End(xlDown).End(xlToRight))
            ' 提取数据源起始日期(数据区域第一行的A列值)
            dtSourceStart = sourceSht.Range("A2").Value
            
            ' 在主表A列查找起始日期对应的行
            Set findRng = mainSht.Range("A:A").Find(What:=dtSourceStart, LookIn:=xlValues, LookAt:=xlWhole)
            If Not findRng Is Nothing Then
                ' 找到对应日期,从该行开始粘贴
                pasteStartRow = findRng.Row
            Else
                ' 未找到对应日期,追加到现有数据末尾
                pasteStartRow = mainSht.Range("A" & Rows.Count).End(xlUp).Row + 1
            End If
            
            ' 复制粘贴数据,无需选中
            sourceRng.Copy mainSht.Range("A" & pasteStartRow)
            
            Application.CutCopyMode = False
            wb1.Close SaveChanges:=False
            
            Set wb1 = Nothing
            Set sourceRng = Nothing
            Set findRng = Nothing
        End If
    Next fld
    
    Application.ScreenUpdating = True
End Sub

使用注意事项

  • 需确保主表和数据源的日期均存储在A列,且日期格式完全一致,避免匹配失败
  • 如果日期存储列有调整,修改代码中对应列的索引即可
  • 若数据源的表头结构有变化,可同步调整数据源范围的定位逻辑

内容的提问来源于stack exchange,提问作者Dan Andrei Sica

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:36:03