更新日:、 作成日:

VBA シート名を取得または変更する

はじめに

Excel VBA マクロでシート名を取得または変更する方法を紹介します。

Sheets.Name または Worksheets.Name プロパティから、シート名を取得または変更できます。

ActiveSheet.Name プロパティから、アクティブシート名を取得または変更できます。

Index プロパティから、シートのインデックスを取得できます。

シートを指定して取得するには「シートを取得する」をご覧ください。

シート名を取得する

sheet1

Sheets の引数にインデックスを指定すると、そのシート名を取得できます。

1 番左のシート名を取得するには Sheets(1).Name または Worksheets(1).Name を入力します。1 番左のシートが 1 です。

Dim s As String
s = Sheets(1).Name     ' 1 番左のシート名を取得
s = Worksheets(1).Name ' 1 番左のシート名を取得
s = Sheets(2).Name     ' 2 番目のシート名を取得
s = Worksheets(2).Name ' 2 番目のシート名を取得
Debug.Print(s)

Sheets と Worksheets の違いはワークシート以外を取得するかどうかです。

  • Sheets:すべてのシートを取得
  • Worksheets:ワークシートのみ取得(グラフシートなどは取得しない)

インデックスを取得

シート「Sheet1」のインデックスを取得するには Sheets("Sheet1").Index または Worksheets("Sheet1").Index を入力します。

Dim i As Integer
i = Sheets("Sheet1").Index     ' シート「Sheet1」のインデックスを取得
i = Worksheets("Sheet1").Index ' シート「Sheet1」のインデックスを取得
i = Sheets("Sheet2").Index     ' シート「Sheet2」のインデックスを取得
i = Worksheets("Sheet2").Index ' シート「Sheet2」のインデックスを取得
Debug.Print(i)

指定したシートが存在しないときは「エラー 9 インデックスが有効範囲にありません。」が発生します。

シートの存在チェックをするには「シートの存在確認をする」をご覧ください。

シート名を変更する

1 番左のシート名を変更するには Sheets(1).Name = "名前" または Worksheets(1).Name = "名前" のように入力します。1 番左のシートが 1 です。

Sheets(1).Name = "名前"        ' 1 番左のシート名を変更
Sheets("Sheet1").Name = "名前" ' シート「Sheet1」の名前を変更

Worksheets(1).Name = "名前"        ' 1 番左のシート名を変更
Worksheets("Sheet1").Name = "名前" ' シート「Sheet1」の名前を変更
2

インデックスは読み取り専用なので変更できません。

シートを移動するには「シートを移動する」をご覧ください。

複数のシート名を取得または変更する

1 番目と 2 番目のシートを取得するには Sheets(Array(1, 2)) または Sheets(Array("Sheet1", "Sheet2")) のように入力します。

Dim ws As Sheets
Set ws = Sheets(Array(1, 2))               ' 1 番目と 2 番目のシートを取得
Set ws = Sheets(Array("Sheet1", "Sheet2")) ' シート「Sheet1」と「Sheet2」を取得

Set ws = Worksheets(Array(1, 2))               ' 1 番目と 2 番目のシートを取得
Set ws = Worksheets(Array("Sheet1", "Sheet2")) ' シート「Sheet1」と「Sheet2」を取得

Dim i As Long
Dim s As Variant
For Each s In ws
    Debug.Print(s.Name)   ' シート名を取得
    i = i + 1
    s.Name = "シート" & i ' シート名を変更
Next

引数に配列でインデックスやシート名を指定します。

すべてのシート名を取得する

Sheets または Worksheets はコレクションになっているので、これをループしてすべてのシート名を取得できます。

' Sheets を For Each でループする
Dim ws As Variant
For Each ws In Sheets
    Debug.Print(ws.Name)
    Debug.Print(ws.Index)
Next

シート名の一覧をセルに入力できます。

' Worksheets を For Next でループする
Dim ws As Worksheet
Dim i As Integer
For i = 1 To Worksheets.Count
    Set ws = Worksheets(i)
    Cells(i, 1).Value = ws.Name ' セルにシート名を入力
    Debug.Print(ws.Name)
    Debug.Print(ws.Index)
Next

アクティブシートのシート名を取得または変更する

アクティブシートのシート名を取得または変更するには ActiveSheet.Name を入力します。

Dim s As String
s = ActiveSheet.Name ' シート名を取得
Debug.Print(s)

ActiveSheet.Name = "アクティブ" ' シート名を変更

アクティブシートとは、開いているシートのことです。

選択シート名

アクティブブックの選択しているシートを取得するには ActiveWindow.SelectedSheets を入力します。複数のシートが選択されているときは、そのすべてのシートを取得します。

Dim ws As Worksheet
Set ws = ActiveWindow.SelectedSheets(1)        ' 選択している 1 番左のシートを取得
Set ws = ActiveWindow.SelectedSheets("Sheet2") ' 選択しているシート「Sheet2」を取得
Debug.Print(ws.Name) ' シート名

VBA を実行しているブックの選択しているシートを取得するには ThisWorkbook.Windows(1).SelectedSheets を入力します。

' このコードを実行しているブックの選択シートを取得
Dim ws As Worksheet
For Each ws In ThisWorkbook.Windows(1).SelectedSheets
    Debug.Print(ws.Name) ' シート名
Next

' 開いているブック「Book1.xlsx」の選択シートを取得
For Each ws In Workbooks("Book1.xlsx").Windows(1).SelectedSheets
    Debug.Print(ws.Name)
Next

SelectedSheets のインデックスは、選択している中で 1 番左のシートが 1 です。

ブックの指定について詳しくは下記の「別ブックのシート名を取得または変更する」をご覧ください。

別ブックのシート名を取得または変更する

ブックを指定しないシートの操作はすべて「アクティブブック」に対して行われます。

  • アクティブブック:開いているすべてのブックの中で一番手前に表示されているブックです。
  • VBA を実行しているブック:実行している VBA のコードがあるブックです。

アクティブブック

ブックを指定しないシートの操作は、アクティブブックを表す ActiveWorkbook. が省略されています。

' どちらも同じコード
Call Sheets.Add
Call ActiveWorkbook.Sheets.Add
ショートカットや VBA の IDE から実行したときに、別ブックがアクティブになっていることがあります。

VBA を実行しているブック

VBA を実行しているブックに対して操作するには ThisWorkbook を入力します。

' VBA を実行しているブックに対して操作
Call ThisWorkbook.Sheets.Add
Call ThisWorkbook.Worksheets.Add

ブックを指定

ブックを指定するには Workbooks の引数にブック名またはインデックスを指定します。

ブック「Book2.xlsx」を指定するには Workbooks("Book2.xlsx") を入力します。

' ブック「Book2.xlsx」のシート「Sheet1」の名前を変更
Workbooks("Book2.xlsx").Sheets("Sheet1").Name = "名前"

' 2 番目のブックの 2 番目のシートの名前を変更
Workbooks(2).Sheets(2).Name = "名前"

Workbooks のインデックスは、ブックを開いた順番に 1 からスタートします。