リストに基づいてワークシートの名前を変更する(Microsoft Excel)
Gilbertには、セルA1:A12に必要なワークシート名のリストを含むワークシート(「Control」という名前)があります。彼は、マクロで、そのセル範囲に基づいてブック内の他の12個のワークシートのそれぞれの名前を変更する方法を必要としています。ワークシート名は動的である必要はありません。彼がマクロを実行するときに、名前を変更する必要があります。
このニーズに対応するマクロ開発の中核は、名前を変更する各ワークシートのNameプロパティに依存することです。たとえば、次のような非常に単純なマクロを使用できます。
Sub RenameSheets() Dim c As Range Dim J As Integer J = 0 For Each c In Range("A1:A12") J = J + 1 If Sheets(J).Name = "Control" Then J = J + 1 Sheets(J).Name = c.Text Next c End Sub
マクロはセル範囲A1:A12をステップスルーするだけで、次のワークシートの名前が「Control」でない場合は、ワークシートの名前をセル値に変更します。
前述のように、このマクロは非常に単純であり、おそらく、はるかに堅牢である必要があります。たとえば、現在のワークブックに13を超える(または少ない)ワークシートがある場合はどうすればよいですか? A1:A12の範囲に空のセルがある場合はどうすればよいですか?誰かがマクロを実行し、「コントロール」がアクティブなワークシートではない場合はどうすればよいですか?
A1:A12に2つの同じ値がある場合はどうすればよいですか? A1:A12の範囲の1つ以上の名前に先頭または末尾のスペースがある場合はどうなりますか?これらおよび(ほとんどの場合)他のさまざまな質問が、マクロの最終的な外観に影響を与える可能性があります。これは、今述べた可能性のいくつかを考慮に入れたマクロのコメント付きバージョンです:
Sub RenameSheets() Dim c As Range Dim J As Integer Dim K As Integer Dim sName As String Dim w(12) As String Dim bGo As Boolean Dim sTemp As String bGo = True If Worksheets.Count <> 13 Then ' Check to make sure exactly 13 worksheets in workbook bGo = False sTemp = "There are more than 13 worksheets." End If If ActiveSheet.Name <> "Control" Then ' Check to make sure Control is active bGo = False sTemp = "Control worksheet is not active." Else ' Check for empty and duplicate cells in range J = 0 For Each c In Range("A1:A12") sName = Trim(c.Text) If sName <> "" Then For K = 1 to J If LCase(w(K)) = LCase(sName) Then bGo = False sTemp = "Duplicate sheet names in list." End If Next K If bGo Then ' Everything still good; add name J = J + 1 w(J) = sName End If End If Next c End If If bGo Then K = 0 For J = 1 To 12 K = K + 1 If Sheets(K).Name = "Control" Then K = K + 1 Sheets(K).Name = w(J) Next J Else MsgBox(sTemp) End If End Sub
マクロの2番目のバージョンが最初のバージョンよりどれだけ長いかに注意してください。マクロに複数のチェックを追加し始めると、チェックがない場合よりもはるかに長くなる可能性があります。もちろん、チェックを追加することの利点は、マクロがあなた以外の人によって使用されるため、問題が発生する可能性が低いことです。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(1506)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。