Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » シート名を取得して一覧を作成するExcelマクロ

シート名を取得して一覧を作成するExcelマクロ

対象:Excel97, Excel2000, Excel2002, Excel2003

実務でExcelファイルを扱っていると、ワークシートの数が増えていきます。

そうなると、
「ワークシート名の一覧を作成したいのですが...」
といった要望が出てきます。

[スポンサードリンク]

For~Nextループでシート名一覧を作成するサンプルマクロ

以下のようなマクロで、アクティブなブックの先頭に「シート名一覧」というワークシートが挿入され、A列にシート名の一覧が作成されます。

Sub シート名一覧を作成する_1()

 Dim i As Long

 Sheets.Add Before:=Sheets(1)
 ActiveSheet.Name = "シート名一覧"

 For i = 2 To Sheets.Count
  Cells(i - 1, "A").Value = Sheets(i).Name
 Next i

End Sub

アクティブなブックの先頭(左端)にシートを挿入して、
 Sheets.Add Before:=Sheets(1)

名前を「シート名一覧」に変更してから、
 ActiveSheet.Name = "シート名一覧"

元々の1枚目のシートから最後のシートの枚数分For~Nextループを回して、
 For i = 2 To Sheets.Count

A列の1行目からシート名を書き出しています。
  Cells(i - 1, "A").Value = Sheets(i).Name

For Each~Nextループでシート名一覧を作成するサンプルマクロ

上記のマクロと同じことをFor Each~Nextループを使って行うとすると、以下のとおりです。

Sub シート名一覧を作成する_2()

 Dim sh As Object ' Worksheetオブジェクト または Chartオブジェクト
 Dim n As Long ' シート名を書き出す行番号

 Sheets.Add Before:=Sheets(1)
 ActiveSheet.Name = "シート名一覧"

 n = 1
 For Each sh in Sheets
  Cells(n, "A").Value = sh.Name
  n = n + 1
 Next sh

End Sub

先にご紹介したFor~Nextループを使ったマクロの場合、カウンター変数・iを使ってそのままシートへの書き出しができましたが、For Each~Nextループの場合は、書き出す行番号を指定するための変数を別に用意する必要があること、
 Dim n As Long
また、その変数を、For Each~Nextループの中で、
  n = n + 1
とインクリメントしなければならないなところが、For~NextループとFor Each~Nextループの違いが明確になっていない段階の方の場合、注意が必要な箇所でしょう。

アクティブなブックの中にワークシート(Worksheetオブジェクト)もグラフシート(Chartオブジェクト)も存在することを想定して、
 Dim sh As Object
と総称オブジェクト型で、オブジェクト変数・shを宣言していますが、ワークシートしか存在していないのであれば、
 Dim sh As Worksheet
と宣言してしまうほうがいいでしょう。

全シートや全ブックに対する処理を行うような場合、For Each~Nextループは便利なのですが、今回ご紹介したマクロのような形でワークシートに書き出しを行うような場合、For~Nextループのほうがシンプルなコードになることが少なくありません。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » シート名を取得して一覧を作成するExcelマクロ

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » シート名を取得して一覧を作成するExcelマクロ

「Sheets・Worksheet」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.