作者:绿色风
分类:
时间:2022-08-17
浏览:105
楼主 kevinchengcw |
Q: 如何用vba代码收集汇总分散的数据? A: 代码如下:
- Type myType '定义一个自定义类型用于装载收集到的内容
- Val1 As Double
- Val2 As Double
- Val3 As Double
- End Type
- Sub test()
- Dim Total() As myType, Ws As Worksheet, Rng1 As Range, Rng2 As Range, Rng3 As Range, R As Range, N&
- ReDim Total(0) '初始化一下自定义类型的数组
- For Each Ws In Worksheets '循环各个工作表
- Set Rng1 = Nothing: Set Rng2 = Nothing: Set Rng3 = Nothing '先清空要查找的目标单元格指向变量
- If Ws.Name <> "总表效果" Then '如果不是总表,则进行采集操作
- With Ws
- With .UsedRange '在使用区域内查找三个关键字的单元格,并分别赋值给变量
- Set Rng1 = .Find("税收")
- Set Rng2 = .Find("小计")
- Set Rng3 = .Find("反扣")
- End With
- For Each R In .Range(Rng1.Offset(1), .Cells(.Rows.Count, Rng1.Column).End(3)) '循环关键字对应的数据区
- With Total(UBound(Total)) '将当前循环到的内容提取并赋值给自定义类型的数组对应项
- .Val1 = R.Value
- .Val2 = Ws.Cells(R.Row, Rng2.Column).Value
- .Val3 = Ws.Cells(R.Row, Rng3.Column).Value
- End With
- ReDim Preserve Total(0 To UBound(Total) + 1) '将数组再加多一项
- Next R
- End With
- End If
- Next Ws
- With Worksheets("总表效果").[d2] '在汇总表中循环提取出内容放入对应单元格中
- For N = LBound(Total) To UBound(Total) - 1
- .Offset(N, 0) = Total(N).Val1
- .Offset(N, 1) = Total(N).Val2
- .Offset(N, 2) = Total(N).Val3
- Next N
- End With
- End Sub
利用type类型可以定义有明确含义的子项,便于程序阅读。 |
2楼 成就滋味 |
学习了 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一