#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天不少~


分享到:


相關文章: