HOME > 即効テクニック > Excel VBA > シート操作関連のテクニック > シート名の取得(セルと配列に格納)

シート名の取得(セルと配列に格納)|Excel VBA

シート操作関連のテクニック

シート名の取得(セルと配列に格納)

(Excel 2000/2002/2003/2007/2010/2013/2016)

ブックの中の全てのシート名を取得して、セルまたは配列に格納します。

サンプル1はFor Each...Nextステートメントを使って、ブックの中の全てのワークシート名をセルに書き出します。

●サンプル1●

Sub Sample1()
    Dim mySheet As Worksheet
    Dim myRow As Long

    myRow = 1
    
    For Each mySheet In Worksheets      '---(1)
        Sheets("Sheet1").Cells(myRow, 1).Value = mySheet.Name
        myRow = myRow + 1
    Next
End Sub

ワークシートだけでなく全てのシートを対象にするには、Sheetsコレクションを使用します。(1)の「Worksheets」を「Sheets」に変更すると、グラフシートも含めた全てのシート名を書き出します。

サンプル2はFor...Nextステートメントを使って、全てのシート名をセルに書き出します。

●サンプル2●

Sub Sample2()
    Dim i As Long
    Dim mySheetCnt As Long
    Dim mySheetName As String

    mySheetCnt = ThisWorkbook.Sheets.Count

    For i = 1 To mySheetCnt
        mySheetName = Sheets(i).Name
        Sheets("Sheet1").Cells(i, 2).Value = mySheetName
    Next i
End Sub

サンプル3は、取得したシート名を配列に格納し、イミディエイトウィンドウに配列に格納した値を出力します。

●サンプル3●

Sub Sample3()
    Dim i As Long
    Dim mySheetCnt As Long
    Dim mySheetName() As String

    mySheetCnt = ThisWorkbook.Sheets.Count  '---(1)

    ReDim mySheetName(1 To mySheetCnt)      '---(2)

    For i = 1 To mySheetCnt
        mySheetName(i) = Sheets(i).Name
        Debug.Print "変数mySheetName(" & i & ")=" & mySheetName(i)
    Next i
End Sub

シートの数は実行するまでわからないので、mySheetNameを動的配列で宣言しています。(1)でシートの数を取得し、(2)でシートの数だけ動的配列の要素を確保しています。

ワークシートが3枚、グラフシートが1枚ある場合、イミディエイトウィンドウには次のように表示されます。

【イミディエイトウィンドウの表示例】
変数mySheetName(1)=Sheet1
変数mySheetName(2)=Sheet2
変数mySheetName(3)=Graph1
変数mySheetName(4)=Sheet3