VBAでシート名を一括で変更する

気づけばこんなに大量にシートができてしまった。というのはよくある。

たまにスッキリさせたいけどシート名の変更って操作が面倒なので一括でやりたいと思った。

コード

シート名の変更は3ステップで完了します。

  1. 現在のシート名を取得する←マクロ
  2. 変更後のシート名を入力←手動
  3. シート名を変更する←マクロ

シート名を取得するコード

Sub シート名取得()
Dim シート名リスト()
    '全てのシートからシート名を取得
    For Each WS In Worksheets
        ReDim Preserve シート名リスト(1 To WS.Index)
        シート名リスト(WS.Index) = WS.Name
    Next
    'A列へ貼り付ける
    Range("A1:A" & UBound(シート名リスト)) = WorksheetFunction.Transpose(シート名リスト)
End Sub

実行結果

3つあるシート名のSheet1〜3をA1:A3に持って来れました。

手動で変更後のシート名を入力

変更後のシート名をB1:B3へ手動で入力します。

今回はローマ字からカタカナにしようと思います。

シート名を変更するコード

Sub シート名変更()
Dim シート名リストビフォー()
Dim シート名リストアフター()
最終行 = Cells(Rows.Count, 1).End(xlUp).Row

'WorksheetFunction.Transposeを使う事で1次元配列として取得
シート名リストビフォー = WorksheetFunction.Transpose(Range("A1:A" & 最終行))
シート名リストアフター = WorksheetFunction.Transpose(Range("B1:B" & 最終行))

    'シート分繰り返す
    For Each WS In Worksheets
        For i = 1 To UBound(シート名リストビフォー)
            'シート名がビフォー一致するかチェックして一致したらアフターに変更する
            If WS.Name = シート名リストビフォー(i) Then
                WS.Name = シート名リストアフター(i)
            End If
        Next
    Next
End Sub

実行結果

下に横並びになっている実際のシート名がシート1〜3に変わりました。

最後に

シートの数によっては手動で変えた方が早いかもしれません。

ワークシートプロパティのIndexとかNameとか覚える用に使ってもらえればいいと思います。

コメント

タイトルとURLをコピーしました