シート数を取得
「何枚あるか」を正しく掴めると、ループや末尾挿入、チェック処理が安定します。基本から実務テンプレート、他ブック対応、例題までを初心者向けに整理しました。
基本:シート数を数える
Sub CountWorksheets_Basic()
MsgBox "ワークシート数: " & ThisWorkbook.Worksheets.Count
End Sub
Sub CountSheets_IncludingCharts()
MsgBox "シート総数(グラフ含む): " & ThisWorkbook.Sheets.Count
End Sub
VB- ポイント:
- Worksheets.Count: ワークシートだけの枚数。実務で最もよく使います。
- Sheets.Count: グラフシート等も含む「総数」。用途に応じて使い分けます。
他ブックのシート数を取得する
Sub CountSheets_OtherWorkbook()
Dim wb As Workbook
Set wb = Workbooks("月次集計.xlsm") '開いているブック名
MsgBox "他ブックのワークシート数: " & wb.Worksheets.Count
End Sub
VB- ポイント:
- Workbooks(“名前”): 対象ブックを明示し、その中のSheets/WorksheetsのCountを読むのが定石です。
安全テンプレート:関数化して使い回す
Function GetSheetCount(Optional wb As Workbook, Optional includeCharts As Boolean = False) As Long
If wb Is Nothing Then Set wb = ThisWorkbook
If includeCharts Then
GetSheetCount = wb.Sheets.Count
Else
GetSheetCount = wb.Worksheets.Count
End If
End Function
Sub Example_UseTemplate()
Dim nWs As Long, nAll As Long
nWs = GetSheetCount() 'ワークシート数
nAll = GetSheetCount(, True) '総シート数
MsgBox "WS: " & nWs & vbCrLf & "ALL: " & nAll
End Sub
VB- ポイント:
- 引数で切替: ワークシートのみ/グラフ含む総数をスイッチ一つで取得。
- 他ブック対応:
wb引数にWorkbooks("名前")を渡せば使い回し可能。
例題で練習:枚数を使う定番タスク
例題1:最後のシートに追加(枚数で位置指定)
Sub AddAfterLast()
Dim i As Long: i = ThisWorkbook.Worksheets.Count
ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets(i)
End Sub
VB- ポイント:
- 末尾取得: 枚数=末尾インデックス。右端に確実に挿入できます。
例題2:全ワークシートをループしてヘッダーを書き込む
Sub WriteHeader_AllSheets()
Dim i As Long, n As Long
n = ThisWorkbook.Worksheets.Count
For i = 1 To n
With ThisWorkbook.Worksheets(i)
.Range("A1").Value = "タイトル"
.Range("B1").Value = "作成日"
.Range("C1").Value = Date
End With
Next
End Sub
VB- ポイント:
- Countで安定ループ: 枚数に基づくForループは分かりやすく安全です。
例題3:可視ワークシートだけカウントして報告
Sub CountVisibleWorksheets()
Dim ws As Worksheet, n As Long
For Each ws In ThisWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then n = n + 1
Next
MsgBox "可視ワークシート数: " & n
End Sub
VB- ポイント:
- 可視限定: 画面操作前の枚数把握に便利。
実務の落とし穴と対策
- SheetsとWorksheetsの違い: グラフを含めたくない場合は必ず
Worksheets.Countを使う。総数が欲しい場合のみSheets.Countにする。 - 対象ブックの誤り:
ThisWorkbook(マクロ格納)とActiveWorkbook(操作中)の違いを意図で統一する。別ブックはWorkbooks("名前")を明示する。 - 非表示やVeryHidden: 枚数は非表示でもカウントされます。画面操作前は「可視のみ」カウントや可視チェックを併用すると安全。
次の一歩(小課題)
- 課題1: 他ブック名を
InputBoxで受け取り、ワークシート数と総シート数をダイアログ表示。 - 課題2: 可視ワークシート数が0なら「目次」シートを自動追加して表示。
- 課題3: 枚数を使って「週報_1〜N」まで不足分だけ末尾に作成し、A1に週番号を書き込む。
