VBA操作多个文件夹文件汇总

Excel VBA教程:一键汇总多个工作簿同名表多列数据 在日常数据处理和报表整理中,跨多个Excel文件合并相同结构的数据是高频需求。手工复制粘贴不仅效率低下,还容易出错,尤其当文件数量众多、数据量庞大时,传统操作往往力不从心。VBA宏作为Excel内置的自动化编程工具,能够通过遍历文件夹、定位同名工作表、批量读取与写入单元格,将繁琐的重复劳动封装成一键运行的自动化流程。它不依赖第三方插件,适用于财务对账、销售统计、库存盘点等典型业务场景。本文从基础概念出发,逐步讲解宏安全设置、VBA编辑器操作、文件遍历与数据合并的原理,并给出完整可复制的代码示例,帮助零基础用 阅读详情

CSV文件汇总工具.xlsm

功能实现思路

  1. 用户界面:工作表放置按钮和路径显示区域
  2. 文件夹选择:分别选择A/B/C等源文件夹和目标文件夹
  3. 文件复制逻辑:
    • 仅复制根目录下的CSV文件(跳过子文件夹)
    • 跳过.xlsm等其他格式文件
    • 同名文件比较修改时间,保留最新版本
    • 相同修改时间则跳过复制
    • 记录变化的文件数量
Option Explicit

' 检查单个路径是否有效的函数
Function CheckSinglePath(ByVal path As String, ByVal pathType As String) As Boolean
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If fso.FolderExists(path) Then
        CheckSinglePath = True
    Else
        MsgBox pathType & "路径不存在: " & path, vbExclamation
        CheckSinglePath = False
    End If
    
    Set fso = Nothing
End Function

' 处理单个源路径的函数
Sub ProcessSourcePath(ByVal sourcePath As String, ByVal targetPath As String, _
                      ByRef csvCount As Long, ByRef copiedCount As Long, ByRef newerInTargetCount As Long)
    Dim fso As Object
    Dim folder As Object
    Dim file As Object
    Dim newFilePath As String
    Dim sourceModDate As Date
    Dim targetModDate As Date
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(sourcePath)
    
    csvCount = 0
    copiedCount = 0
    newerInTargetCount = 0
    
    ' 遍历文件夹中的文件
    For Each file In folder.Files
        ' 只处理 CSV 文件
        If UCase(fso.GetExtensionName(file.Name)) = "CSV" Then
            csvCount = csvCount + 1
            newFilePath = fso.BuildPath(targetPath, file.Name)
            sourceModDate = file.DateLastModified
            
            ' 检查目标文件夹中是否已有同名文件
            If fso.FileExists(newFilePath) Then
                targetModDate = fso.GetFile(newFilePath).DateLastModified
                ' 比较修改时间
                If sourceModDate > targetModDate Then
                    file.Copy newFilePath, True ' 覆盖旧文件
                    copiedCount = copiedCount + 1
                Else
                    newerInTargetCount = newerInTargetCount + 1
                End If
            Else
                ' 直接复制新文件
                file.Copy newFilePath
                copiedCount = copiedCount + 1
            End If
        End If
    Next file
    
    Set fso = Nothing
End Sub

' 主控 Sub 函数
Sub CopyCSVFiles()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim sourcePath As String
    Dim targetPath As String
    Dim csvCount As Long
    Dim copiedCount As Long
    Dim newerInTargetCount As Long
    Dim fso As Object
    
    ' 设置工作表
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 查找最后一个非空行
    lastRow = ws.Range("No").Cells(ws.Range("No").Rows.Count, 1).End(xlUp).Row - 2
    
    ' 检查所有路径
    For i = 3 To lastRow + 2
        sourcePath = ws.Range("Sour_Path").Cells(i - 2, 1).Value
        targetPath = ws.Range("Tar_Path").Cells(i - 2, 1).Value
        
        ' 检查源路径
        If Not CheckSinglePath(sourcePath, "源") Then
            Exit Sub
        End If
        
        ' 检查目标路径,若不存在则尝试创建
        If Not fso.FolderExists(targetPath) Then
            On Error Resume Next
            fso.CreateFolder targetPath
            If Err.Number <> 0 Then
                MsgBox "无法创建目标路径: " & targetPath, vbExclamation
                Exit Sub
            End If
            On Error GoTo 0
        End If
    Next i
    
    ' 处理每个源路径
    For i = 3 To lastRow + 2
        sourcePath = ws.Range("Sour_Path").Cells(i - 2, 1).Value
        targetPath = ws.Range("Tar_Path").Cells(i - 2, 1).Value
        
        ' 处理源路径
        Call ProcessSourcePath(sourcePath, targetPath, csvCount, copiedCount, newerInTargetCount)
        
        ' 输出统计结果
        ws.Range("D" & i).Value = csvCount
        ws.Range("E" & i).Value = copiedCount
        ws.Range("F" & i).Value = newerInTargetCount
    Next i
    
    MsgBox "CSV 文件复制和统计完成!", vbInformation
    Set fso = Nothing
    Set ws = Nothing
End Sub

优化与说明:

  1. CheckSinglePath 函数:

    • 输入参数:path(路径字符串)和 pathType(用于提示的路径类型,如“源”或“目标”)。
    • 功能:检查单个路径是否存在,返回布尔值(True 表示存在,False 表示不存在并弹出提示)。
    • 通用性:可单独调用,适用于任何路径检查场景,增强了模块化设计。
  2. ProcessSourcePath 函数:

    • 负责处理单个源路径的 CSV 文件复制逻辑。
    • 忽略子文件夹和非 CSV 文件,处理同名文件的修改时间比较,统计 CSV 文件总数、复制数量和目标路径中更新的文件数量。
  3. CopyCSVFiles 主函数:

    • 路径检查:逐行检查源路径和目标路径,使用 CheckSinglePath 函数。若源路径无效,程序终止;若目标路径不存在,尝试创建,创建失败则终止。
    • 路径处理:对每行调用 ProcessSourcePath,并将统计结果写入 D、E、F 列。
    • 通用性增强:通过分离路径检查逻辑,代码更模块化,易于复用和维护。
  4. 工作表结构:

    • A2: “数量”,A3:A7 为序号 1-5。
    • B2: “源路径”,B3:B7 为源文件夹路径。
    • C2: “目标路径”,C3:C7 为目标文件夹路径。
    • D2: “源路径所有csv数量”,D3:D7 输出 CSV 文件总数。
    • E2: “拷贝的文件数量”,E3:E7 输出复制的文件数量。
    • F2: “目标路径中更晚的文件数量”,F3:F7 输出目标路径中修改时间相同或更晚的文件数量。
  5. 使用步骤:

    • 在 Sheet1 中设置操作面板,填入源路径和目标路径(例如 C:\Data\A\、C:\Data\Summary\)。
    • 打开 VBA 编辑器(Alt + F11),插入模块,粘贴代码。
    • 运行 CopyCSVFiles 宏。
    • 确保路径格式正确(以 \ 结尾),且有读写权限。
  6. 特点:

    • 通用性:CheckSinglePath 函数可独立用于任何路径检查场景,适合扩展到其他项目。
    • 错误处理:路径检查更细化,源路径和目标路径分别验证,提示信息更清晰。
    • 模块化:代码结构清晰,易于维护和添加新功能。
  7. 注意事项:

    • 确保 Sheet1 中命名区域(“No”、“Sour_Path”、“Tar_Path”)正确设置。
    • 路径需以反斜杠 \ 结尾,避免拼接错误。
ZYNQ平台上基于SGMII接口的IEEE1588/PTP协议高效实现方案 本文深入探讨了在Xilinx ZYNQ平台上,利用SGMII接口实现高精度IEEE1588/PTP协议的方案。通过将硬件时间戳单元集成在PL端的AXI以太网子系统IP核中,该方案绕过了软件协议栈和外部PHY的延迟,实现了亚微秒级的时间同步精度。文章详细解析了硬件设计、Vivado IP配置、Linux驱动移植及PTP协议栈部署等关键步骤,为工业控制、通信等领域的高精度网络同步提供了高效、灵活的解决路径。 阅读详情

相关推荐

华为2288H V5服务器断电后‘趴窝’?别慌,手把手教你用SmartKit+BMC修复工具搞定

本文详细介绍了华为2288H V5服务器在断电后无法启动的修复方法,通过SmartKit和BMC修复工具进行故障诊断与修复。文章提供了从工具获取、安装到具体修复流程的完整指南,帮助运维人员快速恢复服务器运行,并给出了后续加固与预防措施,确保服务器稳定运行。

weixin_30575517的博客 298

【vba】【excel】宏 选择文件夹

主要是这个方法得利用Application.FileDialog,还有很多其他得参数可以设定。.Title = "请选择文件夹"

weixin_61256014的博客 1248

VS Code+ESP-IDF开发避坑指南:头文件标红报错的5种解决方法(附CMakeLists.txt配置)

本文详细解析了在VS Code中使用ESP-IDF开发ESP32时头文件标红报错的5种解决方法,包括环境配置检查、CMakeLists.txt规范配置、路径解析策略、缓存清理技巧和高级调试手段。特别提供了CMakeLists.txt的实战配置示例,帮助开发者彻底解决头文件路径问题,提升开发效率。

weixin_33670786的博客 560

VBA中通过选择对话框选择文件或文件夹-filedialog用法

c. 与文件夹选择不同的时,这里可以选择是否要多选文件,属性为AllowMultiSelect,默认是True,可以多选,如果设置为False,就是不可以多选。上文中获取的paths是一个对象(如下图),Count表示选择项的个数,如果属性Count=0则说明没有选择文件夹或者文件。可能通过下标获取选择的其中一个项,paths(1)代表第一个选择到的项,在这里的值是"C:\shell.log"。b. 获取选择到的文件 set paths = FileDialogObject.SelectedItems。

weixin_43213909的博客 2674

深度学习之Pytorch---本人踩过的坑(报错总结)第十篇

深度学习之Pytorch安装时遇到的问题—本人踩过的坑(报错总结) 报错一:pip install torchvision 出现“由于目标计算机积极拒绝,无法连接”的问题 解决方案:找到自己浏览器的工具或选项,我的是火狐,具体解决方案如下图 然后找到桌面左下角,点击搜索internet,然后点击internet选项 最后回到Anaconda Prompt命令行输入pip install...

qq_41570307的博客 1914

命令行驱动视频剪辑:cutcli与AI自动化工作流实战

在视频内容创作领域,自动化与批量化处理是提升生产效率的关键。传统图形界面工具在应对重复性任务时往往效率低下,而通过命令行接口(CLI)驱动视频生成,则能实现流程的程序化控制。其技术原理在于将视频结构抽象为可编程的指令序列,通过解析命令生成标准化的工程文件。这种模式的核心价值在于将视频制作从手动操作转变为代码驱动,特别适合与AI编程助手集成,实现自然语言到视频草稿的自动转换。应用场景广泛覆盖社交媒体内容批量生产、教育视频自动化生成、数据可视化视频组装等领域。本文以cutcli工具为例,深入解析如何通过命令行与

weixin_42520239的博客 579

【办公-excel】VBA 选择文件、文件夹

1、选择单个文件Sub SelectFile() '选择单一文件 'www.okexcel.com.cn With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = False '单选择 .Filters.Clear '清除文...

少莫千华 1万+

2022年电赛F题23年电赛D题-信号调制度测量装置说明中提到带通采样定律。

另外,当对于一个频率很高的射频信号采样时,如果采样频率设的太低,对提高采样量化的信噪比是不利的。低通采样定理在《信号与系统》教材中进行了详细的讨论,但未对带通信号的采样定理进行描述,国内樊昌信和曹丽娜老师编写的《通信原理》第10章第2小节有所描述,但没有详细的公式推导,容易给初学者产生超过该最低采样频率即不会产生频谱混叠的假象。故采样频率没选好,就会使周期性频谱搬移过程中造成频谱混叠,既然频谱和原信号的频谱对不上了,故就无法无失真恢复原信号了,总之,频域波形不出现重叠是无失真传输的重要保障。

qq_64919823的博客 2183

[VBA实用技巧]合并选中的文件(对话框选择,可多选)

多选文件进行合并

weixin_47309318的博客 639

【SpringBoot 4.x 第2节】夯爆了,学习 Spring Boot 4.x 前,需要具备哪些 Java 基础?

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 4572

Python 爬虫实战:爬取股票数据做 K 线图可视化

摘要:本文介绍基于Python的股票数据爬取与K线图可视化全流程技术方案。通过Requests库抓取东方财富网股票数据,使用Pandas进行清洗处理,并利用mplfinance库实现专业K线图绘制。文章详细讲解了数据爬取接口分析、反爬策略配置、K线图绘制方法(包含基础K线图和带均线的进阶版本),以及核心统计指标计算。该方案可应用于股票价格趋势分析,为投资决策提供数据支持,同时强调了数据使用的合规性和技术优化方向。

2503_91057718的博客 2050

VBA及VB6实现多选文件夹,类似Excel打开浏览文件夹对话框,WindowsAPICodePack及Application.FileDialog(3)

VBA和VB6实现 Vista打开文件夹对话框新样式,单选文件夹、多选文件夹、多选文件、单选文件,excel样式的浏览打开文件夹对话框,文件夹对话框支持粘贴路径、修改路径、新建文件夹,支持选择文件类型,打包后无需单独加载

Excel工作圈的博客 1110

【Python机器学习】决策树与随机森林:解释性与鲁棒性的平衡

本文深入探讨了决策树和随机森林在解释性与鲁棒性之间的权衡。决策树以其完美的可解释性、快速的推理速度和无需特征标准化等优势,在许多场景中仍然是首选算法。一个经过合理剪枝的决策树,其每个决策路径都可以转化为业务规则,这在金融风控、医疗诊断等对透明度有严格要求的领域无可替代。然而,单棵决策树的高方差和容易过拟合的特性限制了其泛化能力。随机森林通过集成学习的思想,巧妙地解决了这个矛盾。它维持了相对较好的解释性(通过特征重要性、OOB估计等方式),同时通过多棵树的投票或平均,大幅降低了模型的方差。

nmdbbzcl的博客 628

使用VBA汇总文件夹下所有Excel文件

如何将多个总分结构的表,按照汇总上下合并,分表复制到工作簿的形式汇总

但老师 3529

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Excel中VBA实现文件夹表格合并和数据提取

多个文件夹下excel文件的提取复制。获取多个文件夹下文件和文件夹信息。excel数据批量汇总‘

u010719791的专栏 3091

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Vba实现多个excel汇总为一个excel

过录程序 Sub test() Dim r, i, s, k As Integer, lj, str As String, arr Sheet1.Range("3:65536").Delete Application.ScreenUpdating = False Application.DisplayAlerts = False r = 2 str = ThisWorkbook.Path & "\堂食问卷\" '堂食问

weixin_34280060的博客 1006

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

多个excel合并为一个 多个文件合并为一个

并没有学过VBA,工作需要把多个excel合并为一个,成功之后略微研究了一下原理,希望可以用在其他场合 参考文献 https://www.zhihu.com/question/20366713 https://jingyan.baidu.com/article/148a19218539ae4d70c3b161.html 先上流程: 目的就是把一个文件夹里的多个文件合并到一起 然后 ...

weixin_43105618的博客 1998

多个excel工作簿合并_无需VBA代码,1分钟合并多个工作簿至一个工作簿!

前面分享过一个VBA代码的快速合并多个工作簿至一个工作簿,很多小伙伴表示没学会,那么我们今天不需要VBA代码,只需要几步操作就可以完成,第1,2,3,4个工作簿里面的数据如下所示:其中第1个工作簿有两个工作表,第2个工作表中的内容是:第2个工作簿第第3个工作簿第4个工作簿如果是4个工作簿,可能复制粘贴也完成了,实际工作中可能是几十个,甚至上百个,那么用复制粘贴就费时费力了,今天教大家不用VBA,几...

weixin_39597399的博客 1366

hdfs 多个文件合并_办公软件操作技巧051:如何把多个excel表格文件合并到一个表格中...

在日常工作中,我们有时需要把编辑好的分班级成绩表格文件或者分部门销售文件,合并成一个汇总的数据表格,如下图所示。这时也可以使用直观的复制粘贴法,但如果表格很多的话操作起来就会比较繁琐,今天就来和大家分享另一种合并的方法。分班级的各文件内容具体操作步骤:首先,把需要合并的多个excel表都放到同一个文件夹里面,并在这个文件夹里面新建一个用于汇总的excel表格文件。excel电子表格文件第1步:打开...

weixin_33330762的博客 141

xlsx表格怎么做汇总统计_统计excel表,周汇总和月汇总如何做?

原创 大海 Excel到PowerBI小勤:前面看了关于《批量导入文本文件,再也不需要VBA》的文章,发现批量汇总文本文件好简单,但我现在更多的是一大堆格式一样的Excel文件,要汇总起来,怎么办?大海:如果是以前,真得写VBA,但现在Excel里有了Power Query,这个事情就变得好简单了。第一步:【数据】-【从文件】-【从文件夹】第二步:【浏览】选择数据所在的文件夹,【确定】第三步:数据...

weixin_39804629的博客 1197

VBA宏汇总同文件夹下多工作簿数据

VBA宏汇总同文件夹下多工作簿数据 去发现同类优质开源项目:https://gitcode.com/ 介绍 本资源包含了一个由VBA宏组成的工具,旨在帮助用户快速汇总同一文件夹下的多个Excel工作簿中的数据。该工具是作者在学习VBA编程过程中编写的,它集合了几个基础的操作命令,并经过实际测试验证其可用性。 此VBA宏适合初学者参考与学习,同时也可以为解决日常办公中的一些简单问题提供便利。通过使用...

gitblog_06740的博客 414

VBA实现格式相同的excel文件汇总合并

VBA实现格式相同的excel文件汇总合并 去发现同类优质开源项目:https://gitcode.com/ 此资源文件提供了一个利用VBA(Visual Basic for Applications)编写的脚本,能够实现将多个格式相同的Excel文件进行汇总合并的功能。通过使用该脚本,可以有效减少人工进行复制粘贴的操作,提高工作效率,降低出错概率。 功能特点 自动化处理:通过VBA脚本一键完成...

gitblog_06703的博客 289

VBA笔记系列

个人 VBA 笔记,一些常用的操作

zyq_victory的博客 750

VBA 从同一文件夹下各个工作表的相同位置取值,形成表单并增加链接

因工作需要,要从同一文件夹下各个工作表的指定位置,取值,形成列表,并增加链接以便领导备查。由于工作表都放在FTP共享上的,所以也将表格放在上一级的文件夹中。1、将转换分钟和拆分代码名称的FUNCTION分别写成两个类模块。这里有两个按钮,一个是“仅新增”,一个是“全部刷新”。全部刷新是如果有修改过的EXCEL覆盖了,全部更新掉。这个就是要取值的内容,其中程序时间要转换成分钟。仅新增是为了如果有新加的EXCEL时用来增加。这些都是要取值的文件。

weixin_44819434的博客 557

VBA批量提取与插入工作表,Excel和WPS通用方案

在办公自动化场景中,Excel工作表的批量操作是高频需求。VBA作为内置于Excel与WPS的编程语言,无需额外安装依赖,即可直接驱动工作簿完成重复性文件处理。其核心原理是通过遍历目标文件夹中的工作簿对象,结合Workbook与Worksheet的复制、移动方法,实现从多个文件中提取指定工作表,或将当前模板反向插入到多个工作簿中。相比Python等外部脚本,VBA在保留原始样式、交互友好性和部署便利性上更具优势,尤其适合中小规模文件的日常整理。实际应用中,财务汇总、报表收集、模板下发等场景均可借助这一技术高

weixin_34321753的博客 304

把当前文件夹的xlsx或xls文件合并到一个excel文件中的不同sheet中

把当前文件夹的xlsx或xls文件合并到一个excel文件中的不同sheet中步骤如下: 把需要合并的文件放到同一个文件夹 在该文件夹中新建一个excel文件 打开新建的excel问价,把鼠标放到sheet那,右键鼠标,选择“查看代码” 在代码框输入下面的代码 Private Sub copy_csvfile_to_excel() Dim m...

weixin_34007879的博客 375
上一篇: 蒙特卡洛模拟利率模型和基金净值关系
下一篇: 对数运算法则(rule of logarithmic operations)和对应导数关系
偷心伊普西隆
博客等级 码龄7年 511粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值