Excel VBA 逆引き集 | シート数を取得

Excel VBA
スポンサーリンク

シート数を取得

「何枚あるか」を正しく掴めると、ループや末尾挿入、チェック処理が安定します。基本から実務テンプレート、他ブック対応、例題までを初心者向けに整理しました。


基本:シート数を数える

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に週番号を書き込む。

タイトルとURLをコピーしました