#VBA# 一键提取总表数据到分表,1秒都不用

徐军泰

当然,一个问题有不同的解法,我在打卡里看到大家说用透视表,但是没看到大家的截图。

我是用VBA实现的,这是一个非常好的可以了解到底什么是VBA的案例:


#VBA# 一键提取总表数据到分表,1秒都不用

首先,为了制作这个案例,我需要根据总表中的姓名,快速新建8张工作表,并依次用名字去命名工作表。

我写了如下代码(ALT+11打开VBE,新建模块,在模块中编写代码):


#VBA# 一键提取总表数据到分表,1秒都不用


Sub 批量新建工作表()

Dim i

For i = 1 To 8

Worksheets.Add after:=Sheets(Sheets.Count)

Sheets(i + 1).Name = Sheet1.Cells(i + 2, 2)

Next

End Sub

知识点说明:

1、 For……Next,VBA常用循环语句

2、Worksheet.Add,利用工作表的Add方法新建工作表,after指定在哪张表后面新建

3、Sheets.Count,计算当前总共有多少张表

4、Sheets(i + 1).Name = Sheet1.Cells(i + 2, 2),用B列的姓名依次给新的工作表命名


新建好工作表之后 ,用CTRL键全选8张分表,一次性在分表制作一个统计表,如下图:


#VBA# 一键提取总表数据到分表,1秒都不用

接下来,就是关键的提取工作了,同样用代码实现:

#VBA# 一键提取总表数据到分表,1秒都不用

Sub 提取数据()

Dim rng As Range '定义一个单元格区域类型的变量rng

Set rng = Sheet1.Range("b3:b10") ‘让rng代表B3:B10这个单元格区域


For Each cell In rng '在rng这个区域内逐个单元格进行循环操作

Worksheets(cell.Value).Cells(2, 3) = cell.Value '提取姓名到分表

Worksheets(cell.Value).Cells(3, 3) = cell.Offset(0, 1) '提取第工作量得分

Worksheets(cell.Value).Cells(4, 3) = cell.Offset(0, 2) '提取完成分

Worksheets(cell.Value).Cells(5, 3) = cell.Offset(0, 3) '提取贡献分

Next cell

End Sub

为了方便大家理解每行代码的含义,我在代码后加了注释。

编写好代码之后,我们可以直接在代码上点F5运行,或者指定宏给按钮,就可以一键完成提取了,效果如下:


#VBA# 一键提取总表数据到分表,1秒都不用

案例总结:

这个案例中,我们只放了8张分表,实际工作中几十张、几百张表都有可能,这时候VBA的优势就体现出来了。

很多星友可能对VBA还不了解,相比其它Excel功能,VBA确实学起来比较烧脑。初期,建议先从类似这样的案例入手,做到能看懂大概的意思,知道如何改代码就好了。

今年,表格学院计划录制一套VBA的入门课和实战训练营,届时欢迎大家报名学习。

今天的案例,有看不懂的地方,欢迎打卡提问。

————————

每天上班第1件事,上表格星球打卡学Excel

365天,陪伴1天不少~


分享到:


相關文章: