长沙分类信息网-长沙新闻网

Excel VBA 7.17不连续表头的报表数据如何汇总?VBA只要点下鼠标

2024-3-21 3:37:19发布次查看发布人:
前景提要()
前不久在上班的时候,忽然有小伙伴们说自己想要合并汇总单个excel报表下指定工作表的不连续字段的数据,小编之前确实是写过报表规范数据的合并,但是翻翻之前的文章,在之前写excel报表的时候,并没有涉及到指定字段的汇总的写法,正好也和工作表有关系,今天就一起分享下这个需求,算是第5系列的补充吧
场景模拟
依然还是用我们之前的三班的成绩的案例来分析,我们将数据扩展下,增加了php等语言,方便后续我们进行不连续列的选择
同时小伙伴们也指出,如果某些数据是公式得到的,单纯用复制的话,会导致复制的数据有公式,不准确,今天也一起更改下
代码区
首先,最直接的复制
sub ss()
dim rng as range, arr, sth as worksheet, sth1 as worksheet
set sth1 = activesheet
set sth = worksheets.add
sth.name = 指定列汇总
sth1.activate
set rng = application.inputbox(区域, 标题, , , , , , 8)
arr = activesheet.rows(1)
k = k
for 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 if
next a
end sub
看看效果
成功的将不连续列复制了过来,并且存在公式的总分列也替换成为了数字,不会含有公式了。
然后是数组的方式
sub arr()
dim rng as range, a as range, trng as range, arr(), arr1, sth as worksheet
set rng = application.inputbox(区域, 标题, , , , , , 8)
arr1 = activesheet.usedrange.rows(1)
l = cells(rows.count, 1).end(xlup).row
k = 0
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 i
next a
set sth = worksheets.add
sth.name = 汇总指定不连续列
sth.cells(1, 1).resize(l, k) = arr
end 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 i
next a
其实方法讲解起来也是非常的简单,遍历循环我们选中的单元格区域,即标头,然后找到该表头所在的行数
比方说php
我们来看看代码调试,num是不是等于4
然后我们将第4列的数据全部复制给数组
这样就一一的对应上了,其他的表头也是这样的操作逻辑的,最后新建一个工作表,将数组一次性写入,就完美的结束了
=======================================================
本节课的案例源码已经上传,需要的小伙伴们后台私信“7-17-8”即可,希望大家多多支持~~
好了~明晚19:00,准时再见。

该用户其它信息

推荐信息

长沙分类信息网-长沙新闻网
关于本站