1 问题:如何快速统计多个表里的同一位置的列的和?
如果不是当前工作表则需要涉及到跨表打开其他表的问题,这里暂且不涉及
1.1 数据源
- EXCEL内,有多张表
- 每张表都有数据,格式相同,比如第2列都是数字
- 现在需要统计每张表的这列的和
sheet1
名字 | 数字 |
A | 38 |
B | 4 |
C | 43 |
D | 2 |
E | 6 |
F | 43 |
G | 15 |
sheet2
名字 | 数字 |
A | 31 |
B | 24 |
C | 46 |
D | 48 |
E | 10 |
F | 41 |
G | 22 |
1.2 思路
- 关键点1: 先用VBA统计多个sheet名
- 然后通过读到的表名,用公式统计即可
2 VBA 遍历当前workbook的所有sheet名
2.1 需要先遍历表名,需要用VBA遍历到输出表,单独的sheet里
- 注意点
- 要明白循环内,循环体实际代表的意义,比如i 在这里实际是sheet,需要取其名字 i.name
- 循环里,尽量不是一个变量,就用独立用其他变量,如j 是独立于i的
2.2 实现的代码
代码1 :如果无表头,直接从第1行开始统计
Sub bianli1()
Dim sh1 As Object
k = 1
For Each sh1 In ThisWorkbook.Worksheets
Sheets("sheet3").Cells(k, 1) = sh1.Name
k = k + 1
Next
End Sub
代码2:如果需要从2列统计起
Sub 统计sheet名()
Dim sh As Object
i = 1
For Each sh In Worksheets
Cells(i, 10).Value = sh.Name '没有ActiveWorkSheet的用法
i = i + 1 '不支持i+=1写法
Next sh
End Sub
3 EXCEL表内公式
第2列里,指数这样输入即可:即用 假表名 模仿跨表统计
=SUM(INDIRECT(A1&"!B:B")) 相当于 sum(sheet1!b:b)
- 注意点1:注意,由于是地址引用,需要套一层 indirect()
sh1 | 151 |
sh2 | 222 |
sh3 | 217 |