更新日:、 作成日:
VBA シート名を取得または変更する
はじめに
Excel VBA マクロでシート名を取得または変更する方法を紹介します。
Sheets.Name または Worksheets.Name プロパティから、シート名を取得または変更できます。
ActiveSheet.Name プロパティから、アクティブシート名を取得または変更できます。
Index プロパティから、シートのインデックスを取得できます。
シート名を取得する
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」の名前を変更
インデックスは読み取り専用なので変更できません。
複数のシート名を取得または変更する
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 を実行しているブック
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 からスタートします。
スポンサーリンク