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

如何通过VBA宏对文件夹内所有CSV文件执行分列及数据合并操作

现有代码的核心问题
  • 未正确拼接完整文件路径:仅通过Dir()获取了文件名,没有拼接文件夹路径,无法正确打开目标CSV文件
  • 操作对象指向错误:原代码直接操作当前活动工作表的A列,没有指向打开的CSV文件的工作表,自然不会产生修改效果
  • 缺少遍历迭代逻辑:第一版代码循环内没有执行filename = Dir,会进入死循环;第二版测试代码中MyFiles变量未赋值就传入Workbooks.Open方法,必然执行失败
  • 缺少数据汇总逻辑:仅做了分列操作,没有将处理后的数据写入汇总工作表的相关逻辑
修正后可直接运行的VBA代码
Sub 批量处理CSV并汇总()
    ' 配置参数区,可根据实际情况修改
    Const folderPath As String = "/Users/karlemilthulstrup/Downloads/Test med kun 1Vp/"
    Dim sumSht As Worksheet, csvWb As Workbook, csvSht As Worksheet
    Dim lastRow As Long, sumLastRow As Long
    Dim fileName As String
    
    ' 初始化汇总工作表
    Set sumSht = ThisWorkbook.Worksheets.Add
    sumSht.Name = "汇总结果"
    
    ' 遍历目标文件夹下所有CSV文件
    fileName = Dir(folderPath & "*.csv")
    Do While fileName <> ""
        ' 打开CSV文件
        Set csvWb = Workbooks.Open(folderPath & fileName)
        Set csvSht = csvWb.Worksheets(1)
        
        ' 执行分列操作
        csvSht.Columns("A:A").TextToColumns _
            Destination:=csvSht.Range("A1"), _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=False, _
            Tab:=True, _
            Comma:=True, _
            FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), _
                            Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
                            Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1)), _
            DecimalSeparator:=".", _
            ThousandsSeparator:=",", _
            TrailingMinusNumbers:=True
        
        ' 复制处理后的数据到汇总表
        lastRow = csvSht.Cells(csvSht.Rows.Count, "A").End(xlUp).Row
        sumLastRow = sumSht.Cells(sumSht.Rows.Count, "A").End(xlUp).Row + 1
        ' 第一个文件保留表头,后续文件跳过表头
        If sumLastRow = 1 Then
            csvSht.Range("A1:L" & lastRow).Copy sumSht.Range("A" & sumLastRow)
        Else
            csvSht.Range("A2:L" & lastRow).Copy sumSht.Range("A" & sumLastRow)
        End If
        
        ' 关闭CSV文件,不需要修改原文件则SaveChanges设为False,需要保留原文件分列效果设为True
        csvWb.Close SaveChanges:=False
        
        ' 迭代下一个文件
        fileName = Dir
    Loop
    
    MsgBox "处理完成,共汇总" & sumSht.Cells(sumSht.Rows.Count, "A").End(xlUp).Row - 1 & "条有效数据"
End Sub
使用注意事项
  • 运行前请确保folderPath参数的路径与你实际CSV存放路径一致,Mac系统路径结尾需要保留斜杠
  • 如果你的CSV字段数不是12列,可自行修改FieldInfo参数和复制数据的列范围
  • 不需要修改原CSV文件的话,csvWb.Close的SaveChanges参数保持为False即可

内容的提问来源于stack exchange,提问作者Karl Emil Thulstrup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:45:04