VBA:按照Excel工作表中的名称列自动汇总多个工作薄中对应sheet中所需要的数据

这篇具有很好参考价值的文章主要介绍了VBA:按照Excel工作表中的名称列自动汇总多个工作薄中对应sheet中所需要的数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求如下:

  1. B列为产品名为合并单元格,C列为供应商名,G、H列为金额数据;
  2. 数据源放在同一个文件夹内,B列产品名来源于工作薄名称中间的字符串,C列供应商名来源于工作薄中的sheet名;
  3. G、H列金额数据来源于工作薄中sheet中固定单元格P25:Q25的数值;
  4. 根据B列产品名自动打开对应的工作薄,并按照C列供应商名对应的sheet,把P25:Q25的数据自动复制到G、H列;

VBA执行效果视频

数据自动汇总文章来源地址https://www.toymoban.com/news/detail-680978.html

Sub GetDataFromSourceWorkbooks()
    Dim targetWorkbook As Workbook
    Dim targetWorksheet As Worksheet
    Dim currentSheetName As String
    Dim sourceFolder As String
    Dim productColumn As String
    Dim supplierColumn As String
    Dim amount1Column As String
    Dim amount2Column As String
    Dim cell As Range
    Dim product As String
    Dim supplier As String
    Dim sourceFileName As String
    Dim sourceWorkbook As Workbook
    Dim sourceWorksheet As Worksheet
    Dim amount1 As Double
    Dim amount2 As Double
    
    ' Replace with your specific column letters
    productColumn = "B"
    supplierColumn = "C"
    amount1Column = "G"
    amount2Column = "H"
    
    ' Replace with your target workbook path
    Set targetWorkbook = ThisWorkbook
    
    ' Set target worksheet name
    Set targetWorksheet = targetWorkbook.ActiveSheet ' 假设目标文件中的主工作表为活动工作表
    'Set currentSheetName = ActiveSheet.Name
    'Set targetWorksheet = targetWorkbook.Worksheets(currentSheetName)
    
    ' Input the folder path containing the source workbooks
    
    sourceFolder = InputBox("请输入目标文件路径:", "目标文件路径输入")
    sourceFolder = sourceFolder & "\"
    'sourceFolder = "C:\Users\18703\Desktop\自动化\数据\爱家影视包\"
    
    If sourceFolder = "" Then
        MsgBox "未输入目标文件路径。操作已取消。", vbExclamation
        Exit Sub
    End If
    
    '禁止刷新屏幕
    Application.ScreenUpdating = False
    
    
    Dim firstRow As String
    Dim lastRow As String
    firstRow = 2 '定义数值区域开始的行数
    lastRow = targetWorksheet.Cells(targetWorksheet.Rows.Count, "A").End(xlUp).Row '查找数值区域最后一行

    '开始循环找对应目标工作表对应工作薄中sheet中所需要的单元格数据
    For Each cell In targetWorksheet.Range(productColumn & firstRow & ":" & productColumn & lastRow)
        '产品列值和供应商值
        product = cell.MergeArea.Cells(1, 1).Value ' Get the value of the first cell in the merged range
        supplier = cell.Offset(0, 1).Value
        
        '数据源excel表的所有路径
        sourceFileName = Dir(sourceFolder & "*" & product & "*.xls*")
        
        '若数据源不为空或数据源不是目标工作表就打开对应的工作薄中的sheet
        If sourceFileName <> "" And sourceFileName <> targetWorkbook.Name Then
            Set sourceWorkbook = Workbooks.Open(sourceFolder & sourceFileName)
            Set sourceWorksheet = sourceWorkbook.Worksheets(supplier)
            
            ' 确认所需要的数据
            amount1 = sourceWorksheet.Range("P25").Value
            amount2 = sourceWorksheet.Range("Q25").Value
            
            sourceWorkbook.Close False ' 数据源选择不保存关闭
            
            ' Update the target worksheet with the values from the source workbook
            cell.Offset(0, 5).Value = amount1 ' Amount 1 column
            cell.Offset(0, 6).Value = amount2 ' Amount 2 column
        Else
            cell.Offset(0, 5).Value = "Not Found" ' Amount 1 column
            cell.Offset(0, 6).Value = "Not Found" ' Amount 2 column
        End If
    Next cell
    
    '禁止刷新屏幕
    Application.ScreenUpdating = True
    
    MsgBox "数据获取完成,请确认!"
    
    ' 目标工作表保存但不关闭,确认无误后可手动关闭
    targetWorkbook.Save  ' Save changes
    
    
End Sub



到了这里,关于VBA:按照Excel工作表中的名称列自动汇总多个工作薄中对应sheet中所需要的数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实用VBA:15 一键批量汇总工作表的更优方法

    此前介绍了一键批量汇总工作簿和工作表的方法。简单介绍起见,当时汇总工作表的思路是将各个表格中的内容一股脑复制粘贴到当前工作表中。但这样带来的问题是汇总效果不理想,一是汇总表格中会重复出现标题行,二是实际工作中我们未必需要汇总整个表,也许只需要

    2024年01月20日
    浏览(40)
  • VBA技术资料MF43:VBA_Excel中自动填充

    【分享成果,随喜正能量】以时寝息,当愿众生,身得安隐,心无动乱。愿我们都能,梦见幸福!在踉跄中前进,在跌倒后跃进,逐渐强大.。 我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的

    2024年02月12日
    浏览(32)
  • 【记录】Excel 2021|(三)VBA使用Selenium自动登录网页

    首先需要安装 Selenium Basic ,才能在工具栏中找到 Selenium Type Library 。 在安装Selenium Basic之前,请确保您的计算机上已安装Visual Basic for Applications(VBA)。VBA是Microsoft Office应用程序(如Excel、Word等)中使用的宏语言。 安装Selenium Basic方法如下: 首先,下载Selenium Basic安装程序。

    2024年02月11日
    浏览(41)
  • 对Excel表中归类的文件夹进行自动分类

    首先把excel表另存为.txt文件(注意:刚开始可能是ANSI格式,需要转成UTF-8格式); 再新建一个.txt文件,重命名成.bat文件(注意:直接创建的如果是是UTF-8格式,最好转成ANSI格式,虽然UTF-8格式的.bat文件不影响运行结果,但是可能运行的时候出现乱码); bat文件自动分类代码:

    2024年02月09日
    浏览(38)
  • VBA技术资料MF34:检查Excel自动筛选是否打开

    【分享成果,随喜正能量】聪明人,抬人不抬杠;傻子,抬杠不抬人。聪明人,把别人抬得很高,别人高兴、舒服了,看你顺眼了,自然就愿意帮你!而傻人呢?不分青红皂白,和人家抬杠,别人不高兴、不舒服,怎么会愿意帮你呢?果真是:会说话的想着说,不会说话的抢

    2024年02月15日
    浏览(41)
  • ​LeetCode解法汇总82. 删除排序链表中的重复元素 II

    https://github.com/September26/java-algorithms 给定一个已排序的链表的头  head  ,  删除原始链表中所有重复数字的节点,只留下不同的数字  。返回  已排序的链表  。 示例 1: 示例 2: 提示: 链表中节点数目在范围  [0, 300]  内 -100 = Node.val = 100 题目数据保证链表已经按升序  排

    2024年01月17日
    浏览(44)
  • 使用Vscode 编辑器 导出、导入和运行Excel中的VBA代码

    前言 Excel自带的 Microsoft Visual Basic for Applications 编辑器常被人称为上古编辑器,的确不适合代码编辑,这是其一,其二是当系统语言与Excel的安装语言不一致时,往往出现乱码,看起来极不舒服,这时又需要更改系统语言,所以往往需要探索其他的VBA开发编辑器,经过一番探索

    2024年02月04日
    浏览(144)
  • python实现对excel表中的某列数据进行排序

    如下需要对webCms中的B列数据进行升序排序, 且不能影响到其他列、工作表中的数据和格式 。 排序后

    2024年02月10日
    浏览(45)
  • 【探讨】Java POI 处理 Excel 中的名称管理器

    最近遇到了一些导表的问题。原本的导表工具导不了使用名称管理器的Excel。 首先我们有两个Sheet。B1用的是名称管理器中的AAA, 而B2用的对应的公式。 第二个sheet,名为Test2: 这是一段简化的代码: 控制台的输出为: 这意味着无法解析这个命名统计后的值。 为啥公式可以执行

    2024年02月15日
    浏览(34)
  • 数据分析15——office中的Excel基础技术汇总

    这部分总结就是总结每个基础技术的定义,在了解基础技术名称和定义后,方便对相关技术进行检索学习。笔记不会详细到所有操作都说明,但会把基础操作的名称及作用说明,可自行检索。 本文对于大部分读者有以下作用 1、可以检索一些excel中常用的操作名称 2、获取of

    2024年02月12日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包