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

如何通过VBA一次性将同目录下的多个CSV文件导入至Excel同一张工作表的首个空行

如何通过VBA一次性将同目录下的多个CSV文件导入至Excel同一张工作表的首个空行

嗨,我来帮你调整代码实现批量导入的需求!你的原代码已经有不错的基础,只需要修改几个关键部分,就能让它遍历目录下所有CSV文件,并把数据依次追加到目标工作表的首个空行里。

修改思路

  • 用Dir函数遍历指定目录下的所有CSV文件,替代原代码中只打开单个文件的逻辑
  • 每次导入前自动定位目标工作表的最后一行数据,确保新数据追加到后面,不会覆盖已有内容
  • 可选处理:如果所有CSV文件都有相同表头,第一个文件保留表头,后续文件跳过表头避免重复(你可以根据实际需求调整)

修改后的完整代码

Sub loadDataFromCSV()
    Const csvPath = "N:\Temp voor automatisering\"
    Const csvFilePattern = "*.csv"
    Dim ws As Worksheet, csv As Workbook
    Dim csvFileName As String
    Dim lastRow As Long, firstImport As Boolean
    
    ' 关闭屏幕更新和提示,提升运行速度
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    ' 设置目标工作表,这里用你指定的"NGSimport"
    Set ws = ThisWorkbook.Worksheets("NGSimport")
    ' 标记是否是第一次导入(用来处理表头)
    firstImport = True
    
    ' 获取目录下第一个CSV文件
    csvFileName = Dir(csvPath & csvFilePattern)
    
    ' 遍历所有CSV文件
    Do While csvFileName <> ""
        ' 打开当前CSV文件
        Set csv = Workbooks.Open(csvPath & csvFileName)
        
        With csv.ActiveSheet
            If firstImport Then
                ' 第一次导入:复制所有数据(包含表头)到目标表的A1开始位置
                .Columns("A:U").Copy
                ws.Range("A1").PasteSpecial xlPasteValues
                firstImport = False
            Else
                ' 后续导入:找到目标表的最后一行,跳过CSV的表头,复制数据到空行
                lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
                .Range("A2:U" & .Cells(.Rows.Count, "A").End(xlUp).Row).Copy
                ws.Range("A" & lastRow).PasteSpecial xlPasteValues
            End If
        End With
        
        ' 关闭当前CSV文件,不保存更改
        csv.Close SaveChanges:=False
        ' 获取下一个CSV文件
        csvFileName = Dir
    Loop
    
    ' 恢复屏幕更新和提示
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    MsgBox "所有CSV文件已导入完成!", vbInformation
End Sub

关键代码说明

  1. 遍历CSV文件:Dir函数会自动获取目录下匹配*.csv的文件,通过Do While循环逐个处理,直到没有更多文件
  2. 定位空行:ws.Cells(ws.Rows.Count, "A").End(xlUp).Row会找到A列最后有数据的行号,加1就是首个空行的位置
  3. 表头处理:用firstImport变量标记是否是第一次导入,第一次保留表头,后续跳过表头(如果你的CSV没有表头或者不需要跳过,直接把A2改成A1即可)
  4. 性能优化:开头关闭ScreenUpdating和DisplayAlerts,避免频繁刷新屏幕和弹出提示框,让代码运行更快

注意事项

  • 确认csvPath路径是否正确,末尾要加上反斜杠\
  • 确保目标工作表NGSimport存在,否则会报错
  • 如果你的CSV列数不是A到U,可以调整代码中的列范围(比如改成A:Z或者实际的列数)

备注:内容来源于stack exchange,提问作者Caroline

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:59:08