VBA常用小代碼:就任性!一鍵批量更改工作表名稱~

照例舉個例子,如下圖的A列所示,工作表名是一些可愛傢伙。

現在,我們想把工作表名稱,根據E:F列的匹配信息,修改為如下形式,部門-人名:

(栗子里表名修改的規則,就是依照E:F的信息,在每個人名前增加部門的前綴)

我們可以先把該工作簿現有工作表的名稱提取出來,放置在表格的A列。如此一來,我們就可以很方便的利用函數公式,比如IF、VLOOKUP函數等,根據E:F列的內容,對錶名做針對性的修改。

看我小眼神,這就用到了我們之前說的VBA常用小代碼系列001,一鍵生成工作表目錄不是?

利用該段小代碼,一鍵我們就可以把表名提取到A列了。

當然,那期的代碼是批量提取工作表名稱並建立超鏈接,我們這裡不需要建立超鏈接,代碼可以簡化如下:


Sub ml()

"EH VBA公眾號VBA編程學習與實踐

Dim sht As Worksheet, k&

[a:a].ClearContents"清空A列內容

[a:a].NumberFormat = "@"

"設置文本格式,防止文本數值數據變形

[a1] = "目錄"

k = 1

For Each sht In Worksheets

"遍歷工作簿中每個工作表

k = k 1

"累加K值

Cells(k, 1) = sht.Name

"將工作表名稱依次放入表格A列

Next

End Sub


第二步,我們把新的工作表名稱用函數計算出來,放在表格的B列。

該例中的E:F列提供了每個人員的部門參數,我們可以在B2輸入公式,並向下複製填充:

=IFERROR(VLOOKUP(A2,E:F,2,)&"-"&A2,A2)

最後,就是一鍵更名了。

代碼也不長,如下:


Sub Rename()

Dim shtname$, sht As Worksheet, i&

On Error Resume Next

"當程序運行中出現錯誤時,繼續運行

For i = 2 To Cells(Rows.Count, 1).End(3).Row

"遍歷當前表格A列的數據

shtname = Cells(i, 1).Value

"將表格A列的值,賦予變數shtname

"之所以將shtname的變數類型定義為文本,是防止A列數據為數值時和sheet序列引用產生衝突。

Worksheets(shtname).Name = Cells(i, 2).Value

Next

End Sub


看下動畫效果:

是不是很有趣小炫酷?

當然,我們也可以把兩段代碼合併成一段代碼,也就是省略把工作表名稱提取到A列後再用函數更名的步驟,直接通過VBA編程進行更名,但為了方便大家容易理解和更加靈活的使用這段小代碼,這裡選擇了兩步走的方案。

推薦閱讀:

年少不能的遠足,成為我們老去後的回憶
明年工作遇貴人,財運轉好的生肖
我是一個懶惰到連走路都覺得累的人,我都30多歲了,我這輩子還有希望嗎?
KPI 與 PBC 的相同與區別是什麼?
本科畢業工作後,讀在職研究生是否有必要?

TAG:工作 | 代碼 | 名稱 | 批量 |