如何在excel vba中基于单元格值递增地重命名工作表

我有一个电子表格有多个值,但通过了相同的结构。 我想根据单元格值“E1”重命名工作表。

但是,E1中有多个相同的值。 如何将工作表abc01(如果单元格E1 = abc)和单元格E1 = abc的相应工作表重命名为abc02等等。

我努力了

Sub RenameWorksheet() Dim WS As Worksheet For Each WS In ThisWorkbook.Worksheets WS.Name = WS.Range("E1").Value Next WS End Sub 

如果我在单元格E1中有多个具有相同值的工作表,此代码将失败

任何帮助表示赞赏…

试试这个…

 Sub ReNameSheets() Dim ws As Worksheet Dim i As Long, cnt As Long Dim shIdx As Long For Each ws In Worksheets If InStr(LCase(ws.Name), LCase(ws.Range("E1").Value)) = 0 Then For i = 1 To Worksheets.Count If InStr(LCase(Sheets(i).Name), LCase(ws.Range("E1").Value)) > 0 Then cnt = cnt + 1 If Right(Sheets(i).Name, 2) > shIdx Then shIdx = Right(Sheets(i).Name, 2) End If Next i If cnt > 0 Then cnt = shIdx + 1 ws.Name = ws.Range("E1").Value & Format(cnt, "00") Else ws.Name = ws.Range("E1").Value & "01" End If cnt = 0 shIdx = 0 End If Next ws End Sub 

创build一个计数器variables并在For Each Loop中增加该variables。 之后,您可以将号码附加到E1的值。

正如你所看到的,工作表名称必须是唯一的。 如果名称已经存在,您可以将索引添加到名称的末尾。

 Sub RenameWorksheet() Dim WS As Worksheet With ThisWorkbook For Each WS In .Worksheets WS.Name = WS.Range("E1").Value & IIf(Exists(WS.Range("E1").Value), WS.Index, vbNullString) Next WS End With End Sub Function Exists(ByVal Name As String) As Boolean Dim WS As Worksheet With ThisWorkbook For Each WS In .Worksheets If WS.Name = Name Then Exists = True Exit Function End If Next WS End With End Function