打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel VBA 7.17单个Excel 工作薄不连续表头数据的汇总

前景提要(文末提供源码下载

前不久在上班的时候,忽然有小伙伴们对于说自己想要合并汇总单个Excel工作薄下指定工作表的的不连续字段的数据,我之前确实是写过工作薄规范数据的合并,但是翻翻之前的文章,在之前写Excel工作薄的时候,并没有涉及到指定字段的汇总的写法,正好也和工作表有关系,今天就一起分享下这个需求,算是第5系列的补充吧

场景模拟

依然还是用我们之前的三班的成绩的案例来分析,我们将数据扩展下,增加了PHP等语言,方面我们的进行不连续列的操作

代码区

首先,最直接的复制

Sub ss()Dim rng As Range, arr, sth As Worksheet, sth1 As WorksheetSet sth1 = ActiveSheetSet sth = Worksheets.Addsth.Name = "指定列汇总"sth1.ActivateSet rng = Application.InputBox("区域", "标题", , , , , , 8)arr = ActiveSheet.Rows(1)k = kFor Each a In rng k = k + 1 l = sth.Cells(1, Columns.Count).End(xlToLeft).Column num = WorksheetFunction.Match(a, arr, 0) sth1.UsedRange.Columns(num).Copy If k = 1 Then sth.Cells(1, l).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Else sth.Cells(1, l + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End IfNext aEnd Sub

看看效果

成功的将不连续列复制了过来,并且存在公式的总分列也替换成为了数字,不会含有公式了。

然后是数组的方式

Sub arr()Dim rng As Range, a As Range, trng As Range, arr(), arr1, sth As WorksheetSet rng = Application.InputBox("区域", "标题", , , , , , 8)arr1 = ActiveSheet.UsedRange.Rows(1)l = Cells(Rows.Count, 1).End(xlUp).Rowk = 0For Each a In rng k = k + 1 num = WorksheetFunction.Match(a, arr1, 0) ReDim Preserve arr(1 To l, 1 To k) For i = 1 To l arr(i, k) = ActiveSheet.UsedRange.Cells(i, num) Next iNext aSet sth = Worksheets.Addsth.Name = "汇总指定不连续列"sth.Cells(1, 1).Resize(l, k) = arrEnd Sub

看看效果

上面的复制粘贴的结果一样,都得到了我们想要的不连续数据,同时将方式转化成为了数值

代码分析

复制粘贴法

相信和一起学习到这里,熟悉写法风格的小伙伴们应该都能够理解最前面的这些简单的代码的内容了,今天着重讲解下新的知识点。

sth.Cells(1, l).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False

选择性粘贴,只粘贴数值,这样一来我们就可以避免公式给我们带来的烦恼了。大致效果相当于鼠标右键的这里

其实不需要记住那么多,记住逻辑结果就好,需要的时候直接更改下前面的位置区域直接套用

来看看数组的写法,关键代码就这一块

For Each a In rng k = k + 1 num = WorksheetFunction.Match(a, arr1, 0) ReDim Preserve arr(1 To l, 1 To k) For i = 1 To l arr(i, k) = ActiveSheet.UsedRange.Cells(i, num) Next iNext a

其实方法讲解起来也是非常的简单,遍历循环我们选中的单元格区域,即标头,然后找到该表头所在的行数

比方说PHP

我们来看看代码调试,num是不是等于4

然后我们将第4列的数据全部复制给数组

这样就一一的对应上了,其他的表头也是这样的操作逻辑的,最后新建一个工作表,将数组一次性写入,就完美的结束了

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel VBA 7.15 Excel表格合并之指定列合并 合并数据更精确
Excel VBA 7.54按某列拆分,同时按工作表汇总,并自动补齐工作表
Excel技能树系列10:拿来就用的宏代码17条
Excel VBA工作薄5.6难度升级!
完全手册Excel VBA典型实例大全:通过368个例子掌握
活用数组 字典的组合,轻松实现Excel自身没有的功能
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服