エクセルで複数のシートを管理しているとき、シート名をひとつずつ手動で変更するのが手間で困っているという方は多いのではないでしょうか。
シート数が多いファイルでは、名前の変更作業だけで大きな時間ロスになることもあります。
本記事では、エクセルのシート名を一括変更する方法を、セルとの連動・マクロ(VBA)の活用・具体的な設定手順まで幅広く解説していきます。
「月ごとのシート名をまとめて変えたい」「セルの内容とシート名を連動させたい」という方はぜひ参考にしてみてください。
エクセルのシート名を変更する基本操作まとめ
それではまず、エクセルのシート名を変更する基本的な方法から確認していきます。
結論として、シート名を一括変更するにはVBA(マクロ)を使う方法が最も確実で効率的です。
1枚ずつ手動で変更する場合はタブをダブルクリックするだけで編集できますが、シートが多い場合はVBAや連動の仕組みを活用するとよいでしょう。
目的に合わせた方法を選ぶことが大切です。
【シート名変更の主な方法】
① シートタブをダブルクリック→直接入力で1枚ずつ変更(最も基本的)
② シートタブを右クリック→「名前の変更」で変更
③ VBA(マクロ)でセルの値を読み込んでシート名を一括変更
④ Workbook_Openイベントを使ってファイルを開くたびにシート名を自動更新する
シートタブをダブルクリックして名前を変更する手順
シート名を変更したいタブをダブルクリックすると、タブ上のシート名が編集可能な状態になります。
そのまま新しいシート名を入力してEnterキーを押すと変更が確定します。
シート名には最大31文字まで設定でき、「/」「\」「?」「*」「[」「]」「:」などの記号は使用できないため注意しましょう。
← 編集中
右クリックメニューから「名前の変更」を選んでも同様に編集できます。
シート名はタブの色と組み合わせて設定すると、複数シートの管理がしやすくなるでしょう。
タブ上で右クリック→「シート見出しの色」から色を設定できます。
シート名に使えない文字と注意点
シート名に使えない文字を入力しようとするとエラーメッセージが表示されます。
また、同じブック内に同一のシート名を付けることはできないため、既存のシート名と重複しないよう注意が必要です。
シート名の先頭や末尾にスペースを入れることも避けた方がよいでしょう。
シート名をコピーして別のシートに活用する方法
シート名をセルに表示させたい場合は、CELL関数を使うと便利です。
【CELL関数でシート名を取得するコードの例】
=MID(CELL(“filename”,A1),FIND(“]”,CELL(“filename”,A1))+1,31)
上記の数式を入力すると、そのシートのシート名をセルに表示できます。
ファイルを一度保存してから使用する必要があります。
シート名をセルに表示させておくと、印刷時のヘッダーとして活用したり、他のシートから参照したりする場面で便利でしょう。
エクセルのシート名をVBAマクロで一括変更する方法
続いては、VBA(マクロ)を使ってシート名を一括変更する具体的な手順を確認していきます。
シートが多い場合や定期的に名前を変更する作業がある場合に非常に効果的な方法です。
セルの値を使ってシート名を一括変更するVBAコード
設定シートのA列に変更前のシート名、B列に変更後のシート名を入力しておき、VBAでその値を読み込んで一括変更する方法が実用的です。
【シート名を一括変更するVBAコード例】
Sub シート名一括変更()
Dim i As Long
Dim ws As Worksheet
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
For Each ws In ThisWorkbook.Worksheets
If ws.Name = Cells(i, 1).Value Then
ws.Name = Cells(i, 2).Value
End If
Next ws
Next i
End Sub
このコードはSheet1のA列に書かれたシート名を探し、B列の名前に書き換えるものです。
Alt+F11でVBAエディタを開き、コードを貼り付けてF5で実行するだけで一括変更が完了します。
実行前にファイルをバックアップしておくと、万が一シート名が意図しない形に変わっても元に戻せるので安心でしょう。
シートの順番に合わせて連番でシート名を付けるVBAコード
シートに「1月」「2月」のように連番でシート名を付けたい場合は、シート数に合わせてループするコードが便利です。
【連番シート名を一括設定するVBAコード例】
Sub 連番シート名設定()
Dim i As Long
For i = 1 To ThisWorkbook.Worksheets.Count
ThisWorkbook.Worksheets(i).Name = i & “月”
Next i
End Sub
上記コードを実行すると、1枚目から順に「1月」「2月」…とシート名が設定されます。
「2024年1月」のような形にしたい場合は、「”2024年” & i & “月”」のように文字列を連結するとよいでしょう。
エクセルのシート名をセルの値と連動させる方法
続いては、シート名をセルの内容と連動させて自動更新する仕組みを作る方法を確認していきます。
セルの値が変わると自動的にシート名も更新される仕組みを作ることで、手動変更の手間をなくせます。
If Target.Address = “$A$1” Then
On Error Resume Next
Me.Name = Target.Value
On Error GoTo 0
End If
End Sub
Worksheet_Changeイベントでシート名を自動更新する手順
シート名と連動させたいシートのタブを右クリックし、「コードの表示」を選択してVBAエディタを開きます。
開いたモジュールウィンドウに上記のWorksheet_Changeイベントのコードを貼り付けます。
これでA1セルの値を変更するたびに、そのシートのシート名が自動的に更新されるようになります。
On Error Resume Nextの記述は、使用できない文字が入力された場合のエラーを回避するために必要なコードです。
全シートにWorksheet_Changeを一括で設定する方法
複数のシートすべてにセルとシート名の連動設定を一括で適用したい場合は、Workbookモジュールにコードを記述する方法が効率的です。
VBAエディタでThisWorkbookをダブルクリックして開き、Workbook_SheetChangeイベントを使うと全シートの変更を一括で監視できます。
シートごとに個別にコードを記述する手間が省けるため、シート数が多い場合に特に便利でしょう。
エクセルのシート名変更に関するよくある疑問と注意点
続いては、シート名の変更に関してよく寄せられる疑問と注意点について確認していきます。
| 疑問・症状 | 原因・詳細 | 対処法 |
|---|---|---|
| シート名が変更できない | ブックまたはシートが保護されている | 「校閲」→「シートの保護の解除」を実行する |
| シート名を変えると数式が壊れる | 他のシートからシート名で参照している数式がある | 名前の変更後に数式が自動更新されるため基本的に問題なし |
| VBAでシート名変更時にエラーが出る | 使用禁止文字が含まれているか既存名と重複している | On Error Resume Nextでエラーをスキップするか入力値を検証する |
| 共有ブックでシート名が変更できない | 共有設定によって構造変更が制限されている | 「校閲」→「ブックの共有の解除」を実行してから変更する |
シート名を変更しても数式への影響はないか
他のシートのセルを「=Sheet2!A1」のように参照している数式がある場合、Sheet2の名前を変更すると数式の参照先も自動的に新しい名前に更新されます。
エクセルが参照の整合性を自動で保ってくれるため、通常は数式が壊れる心配はありません。
ただしVBAコード内にシート名をテキストで直接記述している場合は自動更新されないため、コード内の名前も合わせて変更する必要があります。
シート名の変更履歴を残す方法
どのシート名をいつ変更したかの履歴を残したい場合は、変更前後のシート名をセルに記録するVBAコードを組み込む方法が有効です。
Workbook_SheetDeactivateイベントと組み合わせると、シートを移動するたびに名前の変化を自動記録する仕組みが作れます。
複数人でファイルを共有している場合の変更管理に役立つでしょう。
まとめ
本記事では、エクセルのシート名を一括変更する方法について、基本操作・VBAマクロ・セルとの連動設定まで幅広く解説しました。
1枚ずつ変更する場合はシートタブをダブルクリックして直接入力するのが最も手軽な方法です。
シートが多い場合はVBAを活用してセルの値から一括変更する方法が効率的で、Worksheet_Changeイベントを使えばセルとシート名を常に連動させることも可能です。
シート名の変更ができない場合はシートやブックの保護が原因であることが多いため、まず保護の解除を確認しましょう。
シート名を適切に管理することで、複数シートのファイルがぐっと使いやすくなるでしょう。