分享

Excel VBA 7.24多个Excel报表针对某行数据进行汇总,并且要展示报表名称,你能轻松快速做到嘛?

 Excel和VBA 2021-03-31

一起学习,一起进步~~


最近有小伙伴私信我,他说在之前进行数据汇总的过程中,虽然我们成功的将几个工作薄内的标准数据成功的汇总在了一起,但是一个弊端,当所有的数据都汇总在一起的时候,有时候有些数据的内容是完全相同的, 这个时候在分析数据的时候, 就比较难以分析了,不知道这个相同的数据是真的巧合数据相同,还是因为复制的时候复制错了,如果可以在汇总数据的过程中,顺带加上工作薄和工作表的名称分别区分的话,效果会更加好。

同时也有小伙伴们想要实现针对特定的某一行数据进行合并分析的,其他的数据不要,只需要针对某一行来进行分析,我们今天将两个需求合并,一起实践下吧

场景模拟

这里我们继续使用之前的案例,当前有一个文件夹,文件夹内所有的工作薄的数据都是相同的, 并且有多个工作表,

我们现在针对其中某一行,加上A3这一行的数据进行合并,同时最终的结果中要体现工作薄的名称,以及工作表的名称,方便区分数据的来源渠道,

代码区

思路我们简单过一下,想要针对某一行进行合并,那么最直接的方法就是找到这一行所在的行数就可以了,之前我们分享过单元格的查找,本节可以继续使用,来看看代码

Sub tesrt()Dim book As Workbook, sth As Worksheet, arr(), rng As Range, arr1With Application.FileDialog(msoFileDialogFolderPicker) If .Show = -1 Then pathn = .SelectedItems(1) End IfEnd Withk = 0f = Dir(pathn & "\")ID = Application.InputBox("请输入要统计的列名", "列名的确定", , , , , , 3)Do While f <> "" Workbooks.Open (pathn & "\" & f) For Each sth In ActiveWorkbook.Worksheets k = k + 1 l = sth.Cells(1, Columns.Count).End(xlToLeft).Column With sth.UsedRange Set rng = .Find(ID, , , xlWhole) If Not rng Is Nothing Then num = rng.Row ReDim Preserve arr(1 To l + 2, 1 To k) arr(1, k) = ActiveWorkbook.Name arr(2, k) = sth.Name For i = 1 To l arr(i + 2, k) = sth.Cells(num, i) Next i End If End With Next sth ActiveWorkbook.Close Falsef = Dir()LoopActiveSheet.Range(Cells(1, 1), Cells(1, l + 2)) = Array("工作薄名称", "工作表名称", "姓名", "VBA", "python", "总分")ActiveSheet.Cells(2, 1).Resize(UBound(arr, 2), UBound(arr)) = WorksheetFunction.Transpose(arr)End Sub

首先依然是选择指定的文件夹,提高通用性嘛

然后针对我们要合并的行所在的名称输入

然后坐等结果

出来了,工作薄,工作表的名称都有了,非常的完美

代码分析

今天的代码就真的比较的简单了, 基本上都是基础知识的一个活用而已

前面的都比较的简单,我们直接进入单元格查找的环节吧

Set rng = .Find(ID, , , xlWhole)

这是我们之前分享过的单元格内容的查找方法,不过和我们之前分享的方法有点不同,不同在哪里呢?

Set rng = .Find(ID, , , xlpart)

比较下,最后一个单词不同,xlpart代表的是模糊查找,即部分查找,xlWhole全部查找,就是精确查找,我们来实际操作下对比不同

假设我们现在要汇总A1这一行的数据

当前工作表并没有A1,我们执行下代码

居然num有返回值,是多少呢,10,第10行是A10,并不是我们要的A1,为什么会这样呢?

因为我们代码用的是模糊查找,A1和A10,有相同的部分,就是A1,既然A1不存在,那就是找A10了,所有才会有这样的结果

如果我们换成精确查找呢?

大家在使用的时候要根据场景灵活选择使用方法

顺组这里就非常简单了,因为是标准数组,我们在声明的时候,将前面两列的数组分别赋值为工作表名称,工作薄名称就可以了,后面的将对应的单元格中的位置赋值即可,非常的简单。

================================================

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多