VBAでシート操作を完全攻略:追加・削除・名前取得から変更まで

当ページのリンクには広告が含まれています。
VBAでシート操作をマスターしよう

「VBAを使用して、シート名の変更や取得をするにはどうしたらいいのだろう....」
そんな疑問を持っていませんか?


何枚ものシートを効率よく操作したい

シートの名前を一括で取得して一覧にしたい

シートの追加・削除をワンクリックでできるようにしたい

その場合は、VBAの「シート操作」を
使用すると解決します!


この記事では、Excel VBAでシートを操作するための基本的な方法を詳しく解説します。

シートをアクティブにする方法や名前の取得、シートの追加・削除まで、さまざまな方法を紹介します。

すべての例は、コピペして実行できるので、ぜひ最後までご覧ください。


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度
目次

この記事でできるようになること

この記事を読むことで、以下のことができるようになります。

VBAでシート操作をマスターすると、どのような事ができるようになる?

Excel VBAを使ってシートを操作することで、以下のようなさまざまな作業を効率化できるようになります。

  • シートの自動追加・削除
    • ワークブック内のシート管理をワンクリックで操作 (追加・削除)することができます。
      これにより、人が手動でシートを追加・削除する手間を大幅に削減することが可能です。
  • シートの名前を取得・変更
    • シート名を瞬時に一覧化したり、特定のルールに従って一括で名前を変更できます。
      これにより、大量のシートを一括管理しやすくなり、作業効率を向上させます。
  • 特定のシートを自動で選択
    • 目的のシートに自動で移動 (アクティブ)することもできます。
      これにより、作業中に何度もシートを切り替える場合でも、スムーズに目的のシートへ移動できるため、効率的に作業を進められます。
  • シートをコピーや移動
    • 既存のシートをテンプレートとして簡単に複製できます。
      例えば、毎月の報告書や請求書を作成する場合、一度作成したシートをコピーして、新たにデータを入力するだけで済むようになります。

これらのシート操作をマスターすることで、手動で行っていた繰り返し作業を自動化でき、作業効率が大幅に向上します。

VBAのSheetsオブジェクトのメソッドとプロパティ一覧をご紹介

以下の表は、VBAのSheetsオブジェクトで利用できる主なメソッドとプロパティをまとめたものです。

「Add」や「Name」以外にも、操作を効率化するために便利な機能が数多くあります。

メソッド/プロパティ機能の概要使用例
Activateシートをアクティブにする。Sheets(1).Activate
Add新しいシートを追加する。Sheets.Add
Countシートの総数を取得する。MsgBox Sheets.Count
Copyシートをコピーして新しいシートを作成する。Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
Deleteシートを削除する。Sheets("Sheet1").Delete
Indexシートのインデックス番号を取得する。MsgBox Sheets("Sheet1").Index
Moveシートの位置を移動する。Sheets("Sheet1").Move Before:=Sheets(1)
Nameシートの名前を取得または変更する。Sheets(1).Name = "NewName"
Selectシートを選択する。Sheets("Sheet1").Select
Visibleシートの表示・非表示を設定する。Sheets("Sheet1").Visible = False

Worksheets」と「Sheets」の宣言の違いについて解説

Excel VBAでシート操作を行う際には、「Worksheets」や「Sheets」の2つのオブジェクトが使われます。

これらは、ワークブック(Excelファイル)内のシートを操作するためにとても便利なオブジェクトです。

一見似ているように見えますが、実は少し違いがあります。

以下に、それぞれの使い方と違いを初心者の方でもわかりやすく解説します。

WorksheetsとSheetsの違いって何?

VBAでシートを操作するとき、「Worksheets」オブジェクトはワークシートだけを対象に操作します。

しかし、「Worksheets」は長くて、毎回記述するのが少し大変ですよね。
そこで、「Sheets」と記述すると省略して書くことができます。

ただし、「Sheets」と「Worksheets」には対象とするシートに違いがあるため、操作の目的に合わせて使い分ける必要があります。

「Worksheets」と「Sheets」の違いを解説
  • Worksheets
    • ワークシートだけを対象とするため、ワークシートだけを操作したいときに便利です。
  • Sheets
    • 省略して記述できるだけでなく、ワークブック内のすべてのシート(ワークシート、グラフシートなど)を対象にできるため、さまざまなシートを操作する場合に使えます。

次に、それぞれの使い方をコード例で見ていきましょう。

Worksheetsを使用してシート名を取得する

Worksheetsはワークシートのみを対象に操作する際に使用します。

実際にシート名を取得するコード例を見てみましょう。

コード例: 「Worksheets」を使用してシート名を取得する

Sub ListAllWorksheets()
    Dim i As Long
    
    '// Worksheetsのシート名をすべて取得
    For i = 1 To Worksheets.Count
        Cells(i, 1) = Worksheets(i).Name
    Next i
End Sub

処理結果

「Worksheets」を使用してシート名を取得した結果

このコードを実行すると、セル「A1」にワークシートの名前「Sheet1」「Sheet2」が表示されます。

ここで使っているWorksheetsはワークシートだけを対象にしているため、グラフシート「グラフ3」は含まれません

Sheetsを使ってすべてのシート名を表示する

Sheetsを使うと、ワークシートだけでなく、グラフシートなどワークブック内のすべてのシートを対象に操作できます。

次のコードでは、「Sheets」を使ってシート名を取得します。

コード例: 「Sheets」を使用してシート名を取得する

Sub ListAllWorksheets_2()
    Dim i As Long
    
    '// Worksheetsのシート名をすべて取得
    For i = 1 To Sheets.Count
        Cells(i, 1) = Sheets(i).Name
    Next i
End Sub

処理結果

「Sheets」を使用してシート名を取得した結果

このコードを実行すると、セル「A1」にすべてのシート名「Sheet1」「Sheet2」「グラフ3」が表示されます。

Sheetsはワークシートだけでなく、グラフシートも含むすべてのシートを対象にします。

「Worksheets」と「Sheets」の使い分け

  • Worksheets
    • ワークシートだけを操作したい場合に使用します。
      グラフシートを含めたくないときに便利です。
  • Sheets
    • ワークブック内のすべてのシート(ワークシート、グラフシートなど)を対象に操作したい場合に使用します。

操作の目的に応じて使い分けます。

例えば、ワークシートの一覧を取得したい場合はWorksheetsを、すべてのシートを対象に操作したい場合はSheetsを使うと便利です。

注意ポイント:VBAでシート操作を行う際の重要なポイント

VBAでシートの追加、削除、名前変更などの操作を行う際には、いくつかの注意点があります。

特に、エラーの発生を未然に防ぐためのポイントを押さえておくと、安全にVBAを活用できます。

ここでは、シート操作の失敗やトラブルを回避するためのポイントを解説します。

注意ポイント1: シートの存在確認

シートを操作する前に、対象のシートが存在するかどうかを確認することが重要です。

例えば、削除や名前変更を行う際に、指定したシートが存在しない場合、エラーが発生します。
以下のコード例を参考にして、シートの存在を確認してから操作を行うようにしましょう。

Sub RenameSheetSafely()
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = Sheets("OldSheetName")
    On Error GoTo 0
    
    If Not ws Is Nothing Then
        ws.Name = "NewSheetName"
    Else
        MsgBox "指定したシートが存在しません。"
    End If
End Sub

注意ポイント2: シート削除時の警告メッセージ

シートを削除する際、VBAは確認メッセージを表示します。
この確認メッセージを表示しないようにするためには、Application.DisplayAlertsプロパティを使用して警告メッセージを無効化しましょう
しかし、削除後は必ず元に戻すようにすることが必要です。

Sub DeleteSheetSafely()
    Application.DisplayAlerts = False
    Sheets(1).Delete
    Application.DisplayAlerts = True
End Sub

注意ポイント3: シートの追加位置を指定する

Sheets.Addメソッドでシートを追加する際、追加する位置を明確に指定することで、予期せぬ位置にシートが挿入されるのを防ぎます

例えば、以下のように「Before引数」や「After引数」を使って、追加位置をコントロールしましょう。

⇒ 具体的な例は、「使用例:【 Add 】シートを追加する」を確認する。

Sub AddSheetAfterLast()
    Sheets.Add After:=Sheets(Sheets.Count)
End Sub

注意ポイント4: シート名の一括変更や取得時のエラー回避

シート名を一括で変更する際、既存のシート名と重複しないように注意が必要です。

また、シート名を取得する際にエラーが発生する可能性があるため、エラーハンドリングを組み込むことをおすすめします。

Sub ChangeSheetNames()
    Dim i As Long
    For i = 1 To Sheets.Count
        On Error Resume Next
        Sheets(i).Name = "Sheet" & i
        On Error GoTo 0
    Next i
End Sub

注意ポイント5: インデックス番号の使用に注意

シートのインデックス番号は、シートの並び順に依存します。

シートの順序が変更されると、インデックス番号も変わってしまうため、特定のシートを操作する場合はシート名で指定するほうが確実です。

スポンサーリンク

VBAでシートを操作する使用例をご紹介

ここからは、「シート操作方法」の具体的な使用例を紹介します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

VBAの基礎から応用までを効率よくしっかり学習したい方には、UdemyのVBA講座もおすすめです。

特に自己学習で進める場合、ビデオや実践例があると理解が進みやすくなります。

Activate 】シートを選択する

Activateメソッドは、特定のシートを選択状態にするために使います。

シート名やインデックス番号で指定でき、柔軟なシート操作が可能です。

使用例1: シート名でシートをアクティブにする

VBAで特定のシートをアクティブにするには、Activateメソッドを使います。
シート名を指定することで、シートの順序に関わらず、特定のシートを簡単に選択状態にできます。

コード例
Sub ActivateSheet()
    Sheets("Sheet1").Activate
End Sub
処理結果

このコードを実行すると、「Sheet1」という名前のシートがアクティブになります。
シート名を指定することで、シートの順序が変更されても問題なく目的のシートを選択できるため、この方法は非常にシンプルで実用的です。

コードの動作概要

STEP
シート名の指定とアクティブ化

Sheets("Sheet1").Activateで、シート名が「Sheet1」のシートを指定し、アクティブ(選択状態)にします。

このコードで使用している機能

  • なし
1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub ActivateSheetByName()
    • この行では、新しいサブルーチン「ActivateSheetByName」を定義しています。
      このサブルーチン内に、シートをアクティブにするための一連の処理を書きます。
  2. Sheets(“Sheet1”).Activate
    • Sheets(“Sheet1”)
      • Sheetsオブジェクトを使って、「Sheet1」という名前のシートを指定しています。
        シートの順番に関わらず、名前で直接指定できるため、シートの順序が変わっても影響を受けません。
    • .Activate
      • 指定したシートをアクティブ(選択状態)にします。
        このメソッドを使うことで、シートを画面上で選択し、そのシートに対する操作を行う準備が整います。
  3. End Sub
    • サブルーチンの終了を示しています。
      これ以降のコードは、別の処理として扱われます。

使用例2: シートのインデックス番号で、シートをアクティブにする

シートのインデックス番号を指定してシートをアクティブにする方法を紹介します。
これにより、特定のシートを選択状態にすることができます。

コード例
Sub ActivateSheetByIndex()
    Sheets(2).Activate
End Sub
処理結果

このコードを実行すると、2番目のシートをアクティブにします。
シートの順序が変わる場合でも、インデックス番号を使ってシートを指定できるため、特定のシートを選択する際に便利です。

コードの動作概要
STEP
シート名の指定とアクティブ化

Sheets(2).Activateで、2番目のシートを指定してアクティブにしています。
Sheetsオブジェクトを使うことで、シート名ではなくインデックス番号でシートを指定することが可能です。
インデックス番号はシートの順番に基づくため、シート名が不明な場合でも指定できます。
ただし、シートの順番が変わるとアクティブにするシートも変わるため、状況に応じて使い分けが必要です。

このコードで使用している機能

  • なし
1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub ActivateSheetByIndex()
    • 新しいサブルーチン(マクロ)を定義しています。このサブルーチンの名前は「ActivateSheetByIndex」です。
      サブルーチンの中に、シートをアクティブにするための処理を記述します。
  2. Sheets(2).Activate
    • Sheets(2)
      • Sheetsオブジェクトを使って、2番目のシートを指定しています。
        インデックス番号を使うことで、シート名を知らなくても順番に基づいてシートを選択できます。
        ただし、このインデックス番号はシートの並び順に依存するため、シートの順序が変わると選択されるシートも変わります。
    • .Activate
      • 指定したシートをアクティブにします。
        このメソッドを使うことで、シートを選択状態にし、そのシートで操作を行う準備を整えます。
  3. End Sub
    • サブルーチンの終了を示しています。
      この行で「ActivateSheetByIndex」サブルーチンの処理が完結します。

Name 】シートの名前を取得する

Nameプロパティは、シートの名前を取得したり変更したりするために使用します。
シート名を確認したり、新しい名前に変更する際に役立ちます。

使用例1: シート名を単体で取得する

シート名を取得するには、Nameプロパティを使用します。
これにより、指定したシートの名前を簡単に取得することができます。

コード例
Sub GetSheetName()
    MsgBox Sheets(1).Name
End Sub
処理結果

このコードを実行すると、1番目のシートの名前がメッセージボックスに表示されます。
特定のシートの名前を確認する作業などに役立ちます。

コードの動作概要
STEP
シート名の取得と表示

Sheets(1).Nameで、1番目のシートの名前を取得しています。
Nameプロパティを使うことで、シート名を直接取得できるため、特定のシートの名前をメッセージボックスに表示したり、他の処理に利用したりすることができます。

このコードで使用している機能

1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub GetSheetName()
    • 新しいサブルーチン(マクロ)を定義しています。
      このサブルーチンの名前は「GetSheetName」で、シートの名前を取得して表示するための処理を記述します。
  2. MsgBox Sheets(1).Name
    • Sheets(1)
      • Sheetsオブジェクトを使って、1番目のシートを指定しています。
        ここでは、インデックス番号を使ってシートを選択しています。
    • .Name
      • Nameプロパティを使って、指定したシートの名前を取得します。
        このプロパティは、シートの名前を文字列として返します。
    • MsgBox
      • MsgBox関数を使って、取得したシート名をメッセージボックスに表示します。
        この関数は簡単な確認作業などに便利です。
  3. End Sub
    • サブルーチンの終了を示しています。
      この行で「GetSheetName」サブルーチンの処理が完結します。

使用例2: シート名を変更する

特定のシートの名前を変更するには、シートをSheetsオブジェクトで指定し、Nameプロパティを使用します。
シート名でシートを指定することで、順序に関係なく特定のシートの名前を変更できます。

コード例
Sub RenameSheet()
    Sheets("Sheet1").Name = "NewSheetName"
End Sub
処理結果

このコードを実行すると、シート名が「Sheet1」のシートの名前を「NewSheetName」に変更します。
既存のシートの名前を変更したい場合に便利です。

コードの動作概要
STEP
シートの名前変更

Sheets("Sheet1").Nameを使って、名前が「Sheet1」のシートを指定し、そのNameプロパティに新しい名前「NewSheetName」を代入しています。
これにより、該当するシートの名前が新しい名前に変更されます。

このコードで使用している機能

  • なし
1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub RenameSheet()
    • 新しいサブルーチン「RenameSheet」を定義しています。
      このサブルーチンの中で、特定のシートの名前を変更する処理を行います。
  2. Sheets(“Sheet1″).Name = “NewSheetName”
    • Sheets(“Sheet1″)
      • Sheetsオブジェクトを使って、名前が「Sheet1」のシートを指定します。
        シート名で指定するため、シートの順序に影響されません。
    • .Name
      • シートのNameプロパティを使って、指定したシートの名前を取得・変更します。
    • = “NewSheetName”
      • Nameプロパティに新しいシート名「NewSheetName」を代入しています。
        これにより、シートの名前が「NewSheetName」に変更されます。
  3. End Sub
    • サブルーチンの終了を示しています。
      これで「RenameSheet」サブルーチンの処理が完結します。

使用例3: 全シートの名前を取得 (For Next文)

すべてのシートの名前を取得するには、繰り返し処理である「For Next文」を使用します。
この方法を使うと、ワークブック内にあるすべてのシートの名前を順に取得し、処理することができます。

コード例
Sub GetAllSheetNames()
    Dim i As Long

    For i = 1 To Sheets.Count
        MsgBox Sheets(i).Name
    Next i
End Sub
処理結果

すべてのシート名を順にメッセージボックスで表示します。
シート数が固定されている場合に便利です。

コードの動作概要
STEP
シート名の取得と表示

For i = 1 To Sheets.Countを使って、ワークブック内のすべてのシートを順番に参照します。
Sheets(i).Nameで、「i」番目のシートの名前を取得し、MsgBox関数でその名前をメッセージボックスに表示します。
このようにすることで、シートの順番に関係なく、ワークブック内にあるすべてのシート名を確認できます。

このコードで使用している機能

1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub GetAllSheetNames()
    • 新しいサブルーチン「GetAllSheetNames」を定義しています。
      このサブルーチン内で、すべてのシート名を取得して表示する処理を行います。
  2. Dim i As Long
    • 変数「i」をLong型として宣言しています。
      この変数は、For Nextループのカウンタとして使用します。
      Long型は、大きな数値を扱うことができるため、シート数が多くても問題なくカウントできます。
  3. For i = 1 To Sheets.Count
    • ここからFor Nextループが始まります。
      変数「i」を「1」から「Sheets.Count」までの範囲で繰り返します。
      「Sheets.Count」は、ワークブック内のすべてのシートの数を返します。
      ループのたびに変数「i」の値が「1」ずつ増え、各シートに順番にアクセスします。
  4. MsgBox Sheets(i).Name
    • Sheets(i)
      • Sheetsオブジェクトを使って、i番目のシートを指定します。
        「i」はループのたびに変化するため、すべてのシートを順に参照します。
    • .Name
      • シートの名前を取得します。
    • MsgBox
      • 取得したシート名をメッセージボックスで表示します。
        これにより、すべてのシート名が順に確認できます。
  5. Next i
    • For Nextループの終わりを示しています。
      ここで変数「i」の値を「1」増やし、指定された範囲(1からSheets.Countまで)に達するまでループを繰り返します。
  6. End Sub
    • サブルーチンの終了を示しています。
      これ以降は別の処理が記述されます。

使用例4: 全シートの名前を取得 (For Each文)

繰り返し処理である「For Each文」を使うことで、すべてのシートの名前を取得することができます。
この方法は、シート数が変わる場合にも柔軟に対応でき、シートを1つずつ処理する際に便利です。

コード例
Sub GetAllSheetNamesForEach()
    Dim sh As Worksheet

    For Each sh In Sheets
        MsgBox sh.Name
    Next sh
End Sub
処理結果

このコードを実行すると、ワークブック内のすべてのシート名が順にメッセージボックスで表示されます。
For Each文を使うことで、シート数が変わった場合でも柔軟に対応できます。

コードの動作概要
STEP
シート名の取得と表示

For Each sh In Sheetsを使って、ワークブック内のすべてのシートを順番に参照します。
sh.Nameで、各シートの名前を取得し、MsgBox関数でその名前をメッセージボックスに表示します。
For Each文を使うことで、コードが簡潔になり、シート数の変化にも自動的に対応できます。

このコードで使用している機能

1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub GetAllSheetNamesForEach()
    • 新しいサブルーチン「GetAllSheetNamesForEach」を定義しています。
      このサブルーチン内で、すべてのシートの名前を取得して表示する処理を行います。
  2. Dim sh As Worksheet
    • オブジェクト変数「sh」をWorksheet型として宣言しています。
      このオブジェクト変数は、For Each文の中で、シートを1つずつ参照するために使用します。
  3. For Each sh In Sheets
    • For Each文の開始です。
      Sheetsオブジェクトの中の各シートを順番に参照し、オブジェクト変数「sh」に代入します。
      この文では、すべてのシートを1つずつ処理するため、シート数が増減しても問題なく対応できます。
  4. MsgBox sh.Name
    • sh.Name
      • オブジェクト変数「sh」が現在参照しているシートの名前を取得します。
    • MsgBox
      • 取得したシート名をメッセージボックスで表示します。
        For Each文の繰り返しにより、すべてのシートの名前が順に表示されます。
  5. Next sh
    • For Each文の終了を示しています。
      これにより、次のシートをオブジェクト変数「sh」に代入し、繰り返し処理を続けます。
      すべてのシートが処理されるまでループが続きます。
  6. End Sub
    • サブルーチンの終了を示しています。
      これで「GetAllSheetNamesForEach」サブルーチンの処理が完結します。

【 Add 】シートを追加する

Addメソッドは、Excel VBAで新しいシートをワークブックに追加するために使用します。
シートの追加位置を細かく制御するために、BeforeAfterという引数を使うことができます。

「Add」メソッドの引数について
  • Before引数
    • 新しいシートを指定したシートの前に追加します。
  • After引数
    • 新しいシートを指定したシートの後に追加します。

使用例1: シートの先頭に、新しいシートを追加

シートを追加するには、Sheets.Addメソッドを使用します。
追加する位置を指定することで、ワークブック内のどこに新しいシートを挿入するかを決めることができます。

コード例
Sub AddSheetAtBeginning()
    Sheets.Add Before:=Sheets(1)
End Sub

処理結果

新しいシートをワークブックの先頭に追加します。
データの順番を意識して追加したい場合に便利です。

コードの動作概要
STEP
新しいシートの追加

Sheets.Add Before:=Sheets(1)を使って、新しいシートをワークブックの先頭に追加しています。
Before引数を使うことで、どのシートの前に新しいシートを挿入するかを指定できます。

このコードで使用している機能

  • なし
1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub AddSheetAtBeginning()
    • 新しいサブルーチン「AddSheetAtBeginning」を定義しています。
      このサブルーチン内で、新しいシートをワークブックの先頭に追加する処理を行います。
  2. Sheets.Add Before:=Sheets(1)
    • Sheets.Add
      • 新しいシートをワークブックに追加するメソッドです。
    • Before:=Sheets(1)
      • Before引数を使って、1番目のシートの前に新しいシートを挿入します。
        これにより、新しいシートがワークブックの先頭に追加されます。
  3. End Sub
    • サブルーチンの終了を示しています。
      これで「AddSheetAtBeginning」サブルーチンの処理が完結します。

使用例2: シートの最後に、新しいシートを追加

シートをワークブックの最後に追加するには、Sheets.Addメソッドを使用します。
After引数を使うことで、新しいシートを既存のシートの後ろに追加できます。

コード例
Sub AddSheetAtEnd()
    Sheets.Add After:=Sheets(Sheets.Count)
End Sub
処理結果

このコードを実行すると、ワークブックの一番最後に新しいシートが追加されます。
新しいデータを常に最後に追加したい場合に役立ちます。

コードの動作概要
STEP
新しいシートの追加

Sheets.Add After:=Sheets(Sheets.Count)を使って、新しいシートをワークブック内の最後に追加しています。
After引数を使うことで、指定したシートの後ろに新しいシートを挿入できます。

このコードで使用している機能

  • なし
1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub AddSheetAtEnd()
    • 新しいサブルーチン「AddSheetAtEnd」を定義しています。
      このサブルーチン内で、新しいシートをワークブックの最後に追加する処理を行います。
  2. Sheets.Add After:=Sheets(Sheets.Count)
    • Sheets.Add
      • 新しいシートをワークブックに追加するメソッドです。
    • After:=Sheets(Sheets.Count)
      • After引数を使って、ワークブック内の最後のシート(Sheets.Count)の後ろに新しいシートを追加します。
        Sheets.Countは現在のシート数を返すため、常に最後の位置にシートを追加することができます。
  3. End Sub
    • サブルーチンの終了を示しています。
      これで「AddSheetAtEnd」サブルーチンの処理が完結します。

使用例3: 指定した箇所に、新しいシートを追加

コード例
Sub AddSheetAtSpecificPosition()
    Sheets.Add Before:=Sheets(2)
End Sub
処理結果

:2番目のシートの前に新しいシートを追加します。
シートの配置順を細かく制御したい場合に便利です。

コードの動作概要
STEP
新しいシートの追加

Sheets.Add Before:=Sheets(2)を使って、ワークブック内の2番目のシートの前に新しいシートを追加しています。
Before引数を使うことで、指定したシートの位置を細かく調整できます。

このコードで使用している機能

  • なし
1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub AddSheetAtSpecificPosition()
    • 新しいサブルーチン「AddSheetAtSpecificPosition」を定義しています。
      このサブルーチン内で、特定の位置に新しいシートを追加する処理を行います。
  2. Sheets.Add Before:=Sheets(2)
    • Sheets.Add
      • 新しいシートをワークブックに追加するメソッドです。
    • Before:=Sheets(2)
      • Before引数を使って、2番目のシートの前に新しいシートを挿入します。
        この指定により、2番目のシートの位置に新しいシートを挿入し、既存のシートを後ろにずらします。
  3. End Sub
    • サブルーチンの終了を示しています。
      これで「AddSheetAtSpecificPosition」サブルーチンの処理が完結します。

Delete 】シートを削除する

Deleteメソッドは、指定したシートをワークブックから削除します。
削除時の確認メッセージを非表示にしたい場合は、Application.DisplayAlertsプロパティを利用して制御します。

「Delete」を使用する際の注意ポイント

Application.DisplayAlertsプロパティをFalseに設定すると、削除時の確認メッセージが非表示になります。
これにより、処理が途中で止まることなく自動で進行します。
処理後はTrueに戻して、通常の警告を表示させましょう。

使用例1: 先頭にあるシートを削除

シートを削除するには、Deleteメソッドを使用します。
削除時に表示される警告メッセージを非表示にするには、Application.DisplayAlertsプロパティを使用する必要があります。

コード例
Sub DeleteFirstSheet()
    Application.DisplayAlerts = False

    Sheets(1).Delete

    Application.DisplayAlerts = True
End Sub
処理結果

このコードを実行すると、先頭のシートが削除されます。
Application.DisplayAlerts = Falseを使用することで、削除確認のメッセージを非表示にしています。

コードの動作概要
STEP
シートの削除

Sheets(1).Deleteで先頭のシートを削除します。
削除時に表示される確認メッセージを非表示にするため、Application.DisplayAlertsプロパティを使用してメッセージの表示を制御しています。

このコードで使用している機能

  • なし
1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub DeleteFirstSheet()
    • 新しいサブルーチン「DeleteFirstSheet」を定義しています。
      このサブルーチン内で、先頭のシートを削除する処理を行います。
  2. Application.DisplayAlerts = False
    • Application.DisplayAlertsプロパティをFalseに設定しています。
      これにより、シートを削除するときに表示される確認メッセージ(「本当に削除してもよろしいですか?」)が非表示になります。
      削除の自動化を行う際には、この設定を使うと便利です。
  3. Sheets(1).Delete
    • Sheets(1)
      • 先頭のシートを指定しています。
        Deleteメソッドを使うことで、このシートを削除します。
    • .Delete
      • シートを削除するメソッドです。
        この処理を実行すると、指定したシートがワークブックから完全に削除されます。
  4. Application.DisplayAlerts = True
    • Application.DisplayAlertsプロパティをTrueに設定し、削除確認メッセージを再び表示するように戻します。
      これにより、今後のシート操作で確認メッセージが表示されるようになります。
  5. End Sub
    • サブルーチンの終了を示しています。
      これで「DeleteFirstSheet」サブルーチンの処理が完結します。

使用例2: 最後にあるシートを削除

ワークブック内の最後にあるシートを削除するには、Sheets.Deleteメソッドを使用します。
シート数が変動する場合でも、Sheets.Countを使うことで、最後のシートを確実に指定できます。

コード例
Sub DeleteLastSheet()
    Application.DisplayAlerts = False

    Sheets(Sheets.Count).Delete

    Application.DisplayAlerts = True
End Sub
処理結果

一番最後のシートを削除します。
シート数が変動する場合でも、最後のシートを確実に削除できます。

コードの動作概要
STEP
最後のシートの削除

Sheets(Sheets.Count).Deleteを使用して、ワークブック内の最後のシートを削除します。
Application.DisplayAlertsプロパティを利用して、削除確認のメッセージを非表示にすることで、削除を自動化します。

このコードで使用している機能

  • なし
1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub DeleteLastSheet()
    • 新しいサブルーチン「DeleteLastSheet」を定義しています。
      このサブルーチン内で、ワークブックの最後のシートを削除する処理を行います。
  2. Application.DisplayAlerts = False
    • Application.DisplayAlertsプロパティをFalseに設定しています。
      これにより、シートを削除するときに表示される確認メッセージ(「本当に削除してもよろしいですか?」)が非表示になります。
      削除の自動化を行う際には、この設定を使うと便利です。
  3. Sheets(Sheets.Count).Delete
    • Sheets(Sheets.Count)
      • Sheets.Countは、ワークブック内のシート数を返します。
        これにより、最後のシート(インデックス番号がSheets.Count)を指定します。
    • .Delete
      • 指定したシートを削除するメソッドです。
        この処理により、最後のシートをワークブックから削除します。
  4. Application.DisplayAlerts = True
    • Application.DisplayAlertsプロパティをTrueに設定し、削除確認メッセージを再び表示するように戻します。
      これにより、今後のシート操作で確認メッセージが表示されるようになります。
  5. End Sub
    • サブルーチンの終了を示しています。
      これで「DeleteLastSheet」サブルーチンの処理が完結します。

使用例3: 指定した箇所にあるシートを削除

特定の位置にあるシートを削除するには、Sheets.Deleteメソッドを使用します。
削除するシートの位置がわかっている場合に、この方法を使うと簡単に特定のシートを削除できます。

コード例
Sub DeleteSpecificSheet()
    Application.DisplayAlerts = False

    Sheets(2).Delete

    Application.DisplayAlerts = True
End Sub
処理結果

このコードを実行すると、2番目のシートを削除します。
削除するシートの位置がわかっている場合に便利です。

コードの動作概要
STEP
指定位置のシートを削除

Sheets(2).Deleteを使用して、ワークブック内の2番目のシートを削除します。
Application.DisplayAlertsプロパティで削除確認メッセージを非表示にし、削除の自動化を実現しています。

このコードで使用している機能

  • なし
1行ずつコードを解説
クリック」してコードの詳細解説を見る
  1. Sub DeleteSpecificSheet()
    • 新しいサブルーチン「DeleteSpecificSheet」を定義しています。
      このサブルーチン内で、指定した位置にあるシートを削除する処理を行います。
  2. Application.DisplayAlerts = False
    • Application.DisplayAlertsプロパティをFalseに設定しています。
      これにより、シートを削除するときに表示される確認メッセージ(「本当に削除してもよろしいですか?」)が非表示になります。
      削除の自動化を行う際には、この設定を使うと便利です。
  3. Sheets(Sheets.Count).Delete
    • Sheets(2)
      • 2番目のシートを指定しています。
        削除したいシートのインデックス番号を直接指定することで、そのシートを削除します。
    • .Delete
      • 指定したシートを削除するメソッドです。
        この行で、指定されたシート(2番目のシート)がワークブックから削除されます。
  4. Application.DisplayAlerts = True
    • Application.DisplayAlertsプロパティをTrueに設定し、削除確認メッセージを再び表示するように戻します。
      これにより、今後のシート操作で確認メッセージが表示されるようになります。
  5. End Sub
    • サブルーチンの終了を示しています。
      これで「DeleteSpecificSheet」サブルーチンの処理が完結します。

この記事のまとめ

「Sheets」オブジェクトのメソッドとプロパティを活用することで、シートの追加、削除、取得、名前変更といったさまざまな操作が効率的に行えるようになります。

この記事で紹介したコードを活用して、作業の自動化を実現しましょう。

ポイントのおさらい

  • シートをアクティブにする方法
  • シート名の取得・変更
  • シートの追加方法
  • シートの削除方法
    • 不要なシートを削除するには、Deleteメソッドを使います。
      シートを削除する際の確認メッセージを表示しないようにするには、Application.DisplayAlertsプロパティを活用しましょう。
      これで自動削除の際も処理が止まらずに進みます。

      ⇒ 「【 Delete 】シートを削除する」をもう一度見る。
  • 「Worksheets」と「Sheets」の違い

シート操作をマスターして作業を効率化しよう

この記事で紹介したシート操作の基本をマスターすると、日々のExcel作業が大幅に効率化されます。
例えば、シートの追加や削除をワンクリックで行えたり、シート名を自動で一覧化することでシート管理が楽になったりします。
シートの順番を自在に制御できることで、毎月の報告書作成やデータ集計も簡単になります。

この記事を活用するには

まずは、紹介したコードをコピーして実行し、自分のExcelで動かしてみましょう。

コードを実際に動かすことで、どのようにシートが追加・削除されるか、名前が取得・変更されるかが理解しやすくなります。
次に、必要に応じてコードを少しずつカスタマイズし、自分の業務に合わせて活用してみてください。

この記事が参考になったと思ったら、他のVBA関連の記事もぜひご覧ください。
シート操作を自在に使いこなせるようになれば、Excel作業の効率は劇的に向上します!

あわせて読みたい
サイトマップ VBAOfficeスクリプトワークシート関数 VBA 基本設定 VBAとは? VBAの始め方 VBAのおすすめ設定 セル操作 RangeとCells CurrentRegion Offset Resize 最終行・最終列の取...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次