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 的相同與區別是什麼?
※本科畢業工作後,讀在職研究生是否有必要?