忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【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まで)を順番に回す

以下のサンプルコードを実行すると、アクティブなブックに含まれる全てのシート名がイミディエイトウィンドウに順番に出力されます。

Sub Macro1()
  Dim i As Long
  
  ' 1番目のシートから最後のシートまでループ
  For i = 1 To Sheets.Count
    Debug.Print Sheets(i).Name
  Next i
End Sub

3. 実行結果

イミディエイトウィンドウに、ブック内のシート一覧が上から順に表示されます。

Sheet1
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` 文を使うと、コードがより直感的で読みやすくなります。プロのエンジニアが現場でよく書く「いけいけ」な記法です。

Sub ShowAllSheetNames()
  Dim ws As Worksheet
  For Each ws In Worksheets
    Debug.Print ws.Name
  Next ws
End Sub


2. 全シート一括処理の基盤: 「全シートの特定セルをまとめてクリアする」「全シートをPDF化して出力する」といった高度な自動化も、このシートループ処理が基本骨格になります。


6. まとめ

シート一覧の取得は、複数シートをまとめて操作するマクロの第一歩です。変数の型(`Long`)や `Worksheets` コレクションの選び方に気をつけて、拡張性の高いスマートなコードを作成していきましょう!


PR