Excel VBAでシート名を取得する方法をお探しですね。

広告

Excel VBAでシートを操作しよう!追加・削除・名前変更・コピーの基本まとめ

Excel VBAでシートを自動操作できるようになると、毎月の集計表を作ったり、テンプレートを複製したり、不要な作業用シートを削除したりといった処理が一気に楽になります。

特に「追加」「削除」「名前変更」「コピー」は、実務マクロで何度も使う基本中の基本です。

ただし、シート名のルールや削除時の警告、コピー先の指定をよく理解しないまま書くと、意図しないシートを操作してしまうことがあります。

この記事では、初心者でも迷わないように、Excel VBAでのシート操作について、基本構文から安全に使うコツまで整理して解説していきます。

シート操作を始める前に知っておきたい基本

Excel VBAでシートを操作するときは、まず「どのブックの、どのシートを対象にするのか」をはっきりさせることが大切です。

VBAでは、今開いているブックやアクティブなシートを省略して書けることもありますが、実務では複数のブックを開いた状態でマクロを実行することも珍しくありません。

なので、慣れてきたら `ThisWorkbook.Worksheets(“Sheet1”)` のように、ブックとシートをできるだけ具体的に指定する書き方を意識すると安全です。

`ThisWorkbook` は「マクロが書かれているブック」を指すので、操作対象を固定したいときに便利なんです。

WorksheetとWorksheetsの違い

シートを扱う代表的なオブジェクトには、`Worksheet` と `Worksheets` があります。

– `Worksheet`:1枚のワークシートを表す
– `Worksheets`:ブック内のワークシート全体の集まりを表す

たとえば、`Worksheets(“売上”)` は「売上」という名前の1枚のシートを指定していて、`Worksheets.Count` はブック内にあるワークシートの枚数を取得します。

なお、`Sheets` という書き方もありますが、これはグラフシートなども含む広い集合です。

普通のワークシートだけを操作するなら、意図が明確な `Worksheets` を使うほうが分かりやすいですよ。

シート名のルールに注意

シート名を指定するときには、Excel側のルールにも注意が必要です。

**使えない文字:** `:`、`\`、`/`、`?`、`*`、`[`、`]` など
**文字数:** 1文字以上31文字以内
**重複:** 同じブック内で同名のシートは作れない

VBAで自動的にシート名を付ける場合、日付や取引先名などをそのまま使うと、禁止文字や重複によってエラーになることがあります。

マクロを安定させるには、名前を変更する前に既存シートの有無を確認したり、使えない文字を置換したりする工夫が重要です。

“`vb
Sub SheetBasic()
Dim ws As Worksheet

‘ シート名で指定
Set ws = ThisWorkbook.Worksheets(“売上”)

‘ 左から1番目のシートを指定
Set ws = ThisWorkbook.Worksheets(1)

‘ シート数を取得
Debug.Print ThisWorkbook.Worksheets.Count
End Sub
“`

このように、シート操作の第一歩はメソッドを覚えることだけじゃありません。

対象シートを正しく指定し、シート名の制約を理解し、アクティブシートに頼りすぎない書き方を身につけることが大事です。

特に業務用のマクロでは、一度の実行で多くのシートを追加・削除・コピーすることがあるため、指定ミスは大きなトラブルにつながります。

基本の考え方を押さえておくと、これから説明する追加、削除、名前変更、コピーの処理も理解しやすくなりますよ。

シートを追加する方法:Addメソッドの使い方

Excel VBAでシートを追加するには、`Worksheets.Add` メソッドを使います。

何も指定せずに `Worksheets.Add` と書くと、通常はアクティブシートの前に新しいシートが追加されます。

ただし、実務では「一番最後に追加したい」「特定のシートの右側に追加したい」「追加後すぐに名前を付けたい」というケースが多いので、`Before` や `After` を使って追加位置をはっきり指定するのが基本です。

追加位置を指定する

`Add` メソッドでは、次のように追加位置を指定できます。

– `Before`:既存シートを指定すると、その左側に追加される
– `After`:既存シートを指定すると、その右側に追加される

たとえば、先頭に追加したい場合は `Before:=Worksheets(1)`、末尾に追加したい場合は `After:=Worksheets(Worksheets.Count)` と指定します。

追加されたシートはアクティブになるので、`ActiveSheet.Name = “集計”` のように書くこともできますが、より安全に書くなら、追加したシートを変数に受け取って操作する方法がおすすめです。

“`vb
Sub AddSheetSample()
Dim ws As Worksheet

‘ 末尾にシートを1枚追加して、変数に格納
Set ws = ThisWorkbook.Worksheets.Add( _
After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))

‘ 追加したシートに名前を付ける
ws.Name = “作業用”
End Sub
“`

作業用シートの活用

追加したシートを作業用として使う場面もよくあります。

たとえば、元データを直接並べ替えたくない場合に、一時的なシートへデータをコピーし、そこで集計や重複削除を行ってから結果だけを戻す方法です。

こうすると、元シートを壊すリスクを減らしながら処理できます。

ただし、作業用シートを毎回同じ名前で作成する場合は、すでに同名のシートが存在するとエラーになります。

そのため、作成前に既存の作業用シートを削除する、または日時を含めた一意の名前を付けるなどの工夫が必要です。

“`vb
Sub AddMultipleSheets()
Dim i As Long
Dim ws As Worksheet

For i = 1 To 3
Set ws = ThisWorkbook.Worksheets.Add( _
After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
ws.Name = “月次_” & i
Next i
End Sub
“`

失敗しやすいポイント

シート追加で失敗しやすいのは、追加位置と名前変更のタイミングです。

`Worksheets.Add Count:=3` のように一度に複数枚を追加すると便利ですが、追加された各シートを個別に処理したい場合は、どのシートがどの順番で作られたのかを把握しづらくなります。

実務では「追加する」→「変数に格納する」→「名前を付ける」→「初期設定をする」という流れを1枚ずつ繰り返すほうが、後から読んでも分かりやすいコードになります。

マクロは動けばいいだけじゃなく、あとで修正できることも大切ですからね。

シートを削除する方法:Deleteメソッドと警告制御

Excel VBAでシートを削除するには、`Worksheet.Delete` メソッドを使います。

たとえば、`Worksheets(“作業用”).Delete` と書けば「作業用」シートを削除できます。

ただし、シート削除は元に戻せない操作なので、Excelは通常「このシートを完全に削除しますか」という確認メッセージを表示します。

マクロを自動実行したい場合、この確認が出ると処理が止まってしまうため、`Application.DisplayAlerts = False` で警告を一時的に非表示にすることがあります。

警告を制御する

警告を非表示にするときは、処理後に必ず元の設定に戻すことが大切です。

以下のように、エラーが発生しても確実に設定を戻せるようにしておきましょう。

“`vb
Sub DeleteSheetSample()
Dim alerts As Boolean

alerts = Application.DisplayAlerts

On Error GoTo Finally
Application.DisplayAlerts = False

ThisWorkbook.Worksheets(“作業用”).Delete

Finally:
Application.DisplayAlerts = alerts
End Sub
“`

削除時の注意点

削除時に注意したいのは、次のようなケースです。

– **対象シートが存在しない場合**:エラーになる
– **ブック内の最後の表示シートを削除しようとした場合**:エラーになる

Excelでは少なくとも1枚の表示されているシートが必要なため、すべてのシートを削除することはできません。

また、シート名を固定して削除する場合、そのシートがない環境でマクロを実行するとエラーになります。

したがって、削除前にシートの存在チェックを行うか、エラー処理を組み合わせると安全です。

特に作業用シートを毎回削除して作り直すマクロでは、この考え方が欠かせません。

複数シートを削除する

複数のシートをまとめて削除する場合は、`Worksheets(Array(“Sheet2”, “Sheet3”)).Delete` のように配列で指定できます。

また、アクティブシート以外を削除するような処理では、シート数が変化しても問題が起きにくいように、**後ろから前へループする**のが基本です。

前から削除すると、削除のたびにインデックス番号が詰まり、意図したシートを飛ばしてしまうことがあるためです。

“`vb
Sub DeleteOtherSheets()
Dim i As Long
Dim keepName As String
Dim alerts As Boolean

keepName = ActiveSheet.Name
alerts = Application.DisplayAlerts

On Error GoTo Finally
Application.DisplayAlerts = False

For i = ThisWorkbook.Worksheets.Count To 1 Step -1
If ThisWorkbook.Worksheets(i).Name <> keepName Then
ThisWorkbook.Worksheets(i).Delete
End If
Next i

Finally:
Application.DisplayAlerts = alerts
End Sub
“`

警告制御の使いどころ

`Application.DisplayAlerts` を使うと削除確認を省略できて便利ですが、常に使えばいいわけではありません。

開発中や確認が必要な処理では、あえて警告を表示したままにしておいたほうが安全な場合もあります。

完成した業務マクロで自動処理したい場合にだけ非表示にし、エラーが発生しても設定が戻るようにしておくことがポイントです。

削除はシート操作の中でも特に影響が大きいので、「対象が正しいか」「消してよいタイミングか」「復旧手段はあるか」を意識して実装しましょう。

シート名を変更する方法:Nameプロパティと重複対策

シート名を変更するには、`Worksheet.Name` プロパティに新しい名前を代入します。

たとえば、`Worksheets(“Sheet1”).Name = “売上表”` と書けば、Sheet1の名前を「売上表」に変更できます。

追加した直後のシートに名前を付けたい場合は、`Set ws = Worksheets.Add(…)` のように変数へ格納してから `ws.Name = “作業用”` と書くと、どのシートを変更しているのかが明確です。

`ActiveSheet.Name` でも動作しますが、処理の途中でアクティブシートが変わると意図しないシート名を変更する可能性があるため、変数を使う書き方のほうが実務向きです。

よくあるエラー:名前の重複

名前変更で最も多いエラーは、**同じ名前のシートがすでに存在するケース**です。

Excelでは同一ブック内に同名シートを作れないため、`”集計”` というシートがある状態で別のシートにも `”集計”` と付けようとするとエラーになります。

また、禁止文字を含む名前や31文字を超える名前も使えません。

シート名をユーザー入力やセルの値から作る場合は、特に注意が必要です。

たとえば、日付を `2026/05/12` のような文字列で使うと `/` が含まれるため、そのままではシート名にできません。

`Format(Date, “yyyymmdd”)` のように、シート名として安全な形に変換するとよいです。

“`vb
Sub RenameSheetSample()
Dim ws As Worksheet
Dim newName As String

Set ws = ThisWorkbook.Worksheets(1)
newName = “売上_” & Format(Date, “yyyymmdd”)

ws.Name = newName
End Sub
“`

シートの存在チェック関数

実務でより安定したマクロにするなら、変更前にシートの存在チェックを行う関数を用意しておくと便利です。

シートが存在するかどうかを調べる処理は、追加、削除、名前変更、コピーのすべてで使い回せます。

たとえば、指定した名前のシートがある場合は削除してから作り直す、存在しない場合だけ新規追加する、重複しない名前になるまで連番を付ける、といった処理に応用できます。

“`vb
Function SheetExists(ByVal sheetName As String) As Boolean
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
If ws.Name = sheetName Then
SheetExists = True
Exit Function
End If
Next ws
End Sub
“`

シート名の付け方のコツ

シート名は、ユーザーがExcel画面で確認するための目印でもあります。

VBA側の都合だけで短すぎる名前や意味の分かりにくい名前を付けると、後から手作業で確認するときに混乱します。

一方で、長すぎる名前や記号を多用した名前はエラーや管理ミスの原因になります。

おすすめは、次のような名前です。

– 「売上_202605」
– 「集計_支店別」
– 「作業用」

用途と期間が分かる名前にすると、VBAの処理だけでなく、ブック全体の見通しもよくなりますよ。

シートをコピーする方法:Copyメソッドでテンプレートを複製

既存シートをコピーするには、`Worksheet.Copy` メソッドを使います。

テンプレートシートを複製して月別の集計シートを作る、原本を残したまま作業用シートを作る、といった場面でよく使われます。

コピー先を指定するには、追加と同じように `Before` または `After` を使います。

たとえば、`Worksheets(“テンプレート”).Copy After:=Worksheets(Worksheets.Count)` と書けば、「テンプレート」シートをブックの末尾にコピーできます。

コピー直後はコピーされたシートがアクティブになるため、そのまま名前変更できますが、ここでも変数に入れて扱うと読みやすくなります。

“`vb
Sub CopySheetSample()
Dim ws As Worksheet

ThisWorkbook.Worksheets(“テンプレート”).Copy _
After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)

Set ws = ActiveSheet
ws.Name = “売上_” & Format(Date, “yyyymm”)
End Sub
“`

Copyメソッドの注意点

`Copy` メソッドで注意したいのは、**`Before` も `After` も指定しない場合の動作**です。

この場合、コピーされたシートを含む新しいブックが作成されます。

これは、シートを別ファイルとして出力したいときには便利ですが、同じブック内にコピーしたいだけのときに指定を忘れると、想定外の新規ブックが開いてしまいます。

また、別ブックへコピーする場合は、コピー先ブックを明確に指定する必要があります。

複数ブックを扱うマクロでは、`ActiveWorkbook` に頼りすぎると処理対象がぶれやすいため、ブック変数を使って管理するのが安全です。

重複を避ける工夫

テンプレートをコピーして名前を変更する処理では、**コピー後のシート名が重複しないようにする**ことが重要です。

たとえば毎月同じマクロを実行する場合、すでに「売上_202605」というシートが存在している可能性があります。

その状態で同じ名前に変更しようとするとエラーになるため、実行前に既存シートを確認するか、上書きするのか、連番を付けて別名にするのかを決めておく必要があります。

“`vb
Sub CopyTemplateSafely()
Dim ws As Worksheet
Dim targetName As String

targetName = “売上_” & Format(Date, “yyyymm”)

If SheetExists(targetName) Then
MsgBox targetName & ” はすでに存在します。

“, vbExclamation
Exit Sub
End If

ThisWorkbook.Worksheets(“テンプレート”).Copy _
After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)

Set ws = ActiveSheet
ws.Name = targetName
End Sub
“`

業務マクロでは、エラーを避けるだけでなく、利用者が迷わない動作にすることも大切です。

まとめ:シート操作は組み合わせて理解しよう

シートの追加、削除、名前変更、コピーは、それぞれ単体で覚えるよりも、**組み合わせて理解する**と実務で使いやすくなります。

たとえば、次のような一連の流れは、月次処理の自動化でよく使われます。

1. テンプレートをコピーする
2. コピーしたシート名を当月名に変える
3. 不要になった作業用シートを削除する

このとき、対象シートの指定、名前の重複確認、削除時の警告制御を適切に入れておけば、安定したマクロになります。

Excel VBAでのシート操作まとめとして重要なのは、**メソッド名を暗記することではなく、安全に操作する順番を理解すること**です。

基本構文を押さえたうえで、存在チェックや変数管理を取り入れれば、実務でも安心して使えるシート操作マクロを作成できますよ。

広告