【VBA】ブック内の全シート名を一括取得!Sheets.CountとForループでシート一覧を表示する方法
Excelファイル内にどんなシートが存在するのかを把握したり、特定のシートを探して処理を行いたいとき、ブックに含まれる全シート名を順番に取得する手法はVBA開発の基本テクニックです。今回は `Sheets.Count` と `For` ループを使ったシンプルな実装方法を解説します。
1. 基本概念:Sheets.Count と Sheets(i)
Excel VBAでは、ブックに含まれるシートの総数を Sheets.Count で取得できます。これを `For` ループの終了条件に指定することで、1番目のシートから最後のシートまで順番に処理を適用できます。
・Sheets.Count:ブック内の全シート数(ワークシート+グラフシート等)を返す
・Sheets(i).Name:i 番目のシート名(文字列)を取得する
2. 実践サンプル:全シート名をイミディエイトウィンドウに出力する
ポイント:インデックス番号(1からSheets.Countまで)を順番に回す
以下のサンプルコードを実行すると、アクティブなブックに含まれる全てのシート名がイミディエイトウィンドウに順番に出力されます。
Dim i As Long
' 1番目のシートから最後のシートまでループ
For i = 1 To Sheets.Count
Debug.Print Sheets(i).Name
Next i
End Sub
3. 実行結果
イミディエイトウィンドウに、ブック内のシート一覧が上から順に表示されます。
Sheet2
Sheet3
4. 【超重要】よくある注意点と「ハマりやすい罠」
注意点1:変数 i のデータ型は Variant ではなく Long にする
ループのカウント変数(`i`)に `Variant` 型を使うと、余計なメモリを消費し処理速度が低下します。数値のカウントには整数型(Long)を使うのがVBAの鉄則です。
Dim i As Variant ' 非推奨(低速・無駄なメモリ消費)
Dim i As Long ' 推奨(高速で標準的)
注意点2:Sheets と Worksheets の違いに注意する
`Sheets` はグラフシート等も含めたすべてのシートを対象とします。普通の「セルがある表シート」だけを正確に対象にしたい場合は、`Worksheets` を使用するのが安全です。
For i = 1 To Worksheets.Count ' ワークシートのみを厳密にカウント
5. エンジニアの視点:For Each ループを使ったよりスタイリッシュな書き方
1. For Each ws In Worksheets: インデックス番号(`i`)を使わずに `For Each` 文を使うと、コードがより直感的で読みやすくなります。プロのエンジニアが現場でよく書く「いけいけ」な記法です。
Dim ws As Worksheet
For Each ws In Worksheets
Debug.Print ws.Name
Next ws
End Sub
2. 全シート一括処理の基盤: 「全シートの特定セルをまとめてクリアする」「全シートをPDF化して出力する」といった高度な自動化も、このシートループ処理が基本骨格になります。
6. まとめ
シート一覧の取得は、複数シートをまとめて操作するマクロの第一歩です。変数の型(`Long`)や `Worksheets` コレクションの選び方に気をつけて、拡張性の高いスマートなコードを作成していきましょう!