2016-07-21 12 views
1

大きなワークシートのタブの名前を各ワークシートのセル値を使用して変更しようとしています。問題は、私は許可されていない同じ名前の複数のタブの名前を変更したいと思います。私は1、2などを追加しても大丈夫ですが、それをどうやって行うかはわかりません。Excelシートの同じ名前のタブの名前を変更

たとえば、3枚のセルの値がOhioの場合、タブはOhio1、Ohio2、Ohio3になります。

各シートの名前はA1の値である必要がありますが、重複する名前を考慮する必要があります。

同じ名前の会計処理せずにそれを行うためのVBAコードは次のとおりです。

Sub Worksheet_SelectionChange() 
Dim ws As Worksheet 

For Each ws In Sheets 
ws.Activate 
ActiveSheet.Name = Range("a1").Value 

Next ws 

End Sub 

答えて

0
Sub Worksheet_SelectionChange() 
Dim ws As Worksheet 
Dim i As Integer 

i = 1 

On Error GoTo fixName 

For Each ws In Me.Worksheets 

ws.name = ws.Range("A1").Value 


Next ws 


Exit Sub 
fixName: 
ws.name = ws.Range("A1").Value & i 
i = i + 1 

End Sub 
+0

ありがとう!ただし、最初のシートのA1に基づいてすべての名前が変更されています。それぞれの名前をA1に基づいて自分のシートに付けたいと思います。 – Nechama

+0

私はそのための解決策を更新しました:-)。しかし、今は、これは重複だけでなく、すべての名前の後に数字を入れます。ですから、あなたはインディアナ1、オハイオ2、オハイオ3、インディアナ4、アイオワ5、オハイオ6で終わるかもしれません。 – ale10ander

+0

私は自分の答えを変えました。これはあなたが望むことをするはずです。ここでの奇妙な唯一の動作は、各名前が何回使用されたかを数えず、重複の数を単にカウントすることです。 オハイオ州、インディアナ州、オハイオ州1、アラスカ州、アラスカ州2、アイオワ州、カリフォルニア州、オハイオ州3、インディアナ州4があります。 また、a1が空白の場合、シート名は単に数字になります。 – ale10ander

0
Sub RenameTabs() 
    Dim ws As Worksheet, wsName$, wsCount%, dict ' $ is short for " As String" and % for " As Integer" 
    Set dict = CreateObject("Scripting.Dictionary") 

    For Each ws In Sheets 
     wsName = ws.Range("A1").Value 
     wsCount = IIf(dict.Exists(wsName), dict(wsName) + 1, 1) 
     dict(wsName) = wsCount 

     If wsCount = 1 Then 
      ws.Name = wsName 
     Else 
      If wsCount = 2 Then Sheets(wsName).Name = wsName & 1 ' optional to rename the previous Ohio sheet to Ohio1 
      ws.Name = wsName & wsCount 
     End If 
    Next ws 
End Sub 
関連する問題