和風スパゲティのレシピ

日本語でコーディングするExcelVBA

表示されているシートのみをループする - Visible

ブック内のシートを順次処理していく際、
表示されているシートだけをループする方法を解説します。

シートが表示されているかどうかは、
WorksheetオブジェクトのVisibleプロパティで判定できます。

For Eachステートメントでループする場合

For Eachステートメントを使用して表示シートをループするコードがこちらです。

Sub 表示されているシートのみを処理する()

    Dim 処理シート As Worksheet
    For Each 処理シート In ThisWorkbook.Worksheets
    
        If 処理シート.Visible = True Then
        
            ' ここに表示シートへの処理
            Debug.Print 処理シート.Name
        
        End If
        
    Next
    
End Sub

 
シートが表示されているかどうかは、
VisibleプロパティがTrueであるかどうかで分かります。

Trueのシートだけを分岐して処理をすることで、
表示されているシートのみをループすることができます。

Forステートメントでループする場合

続いてForステートメントを使用したコードがこちらです。

Sub 表示されているシートのみを処理する()

    Dim シート番号 As Worksheet
    For シート番号 = 1 To ThisWorkbook.Worksheets.Count
    
        Dim 処理シート As Worksheet
        Set 処理シート = Worksheets(シート番号)

        If 処理シート.Visible = True Then
        
            ' ここに表示シートへの処理
            Debug.Print 処理シート.Name
        
        End If
        
    Next
    
End Sub

 
結局For文の開始直後に変数「処理シート」にSetしているため、
Visibleに関わるコードはForEach文と全く変わらないですね。

この手のコードでずっと「Worksheets(シート番号)」を書き続けるのも大変ですし、
早々に変数に入れて処理を書くようにしましょう。

他の条件とセットで判定する場合

例えば「表示シートかつシート名が"データ○○"のシート」をループする場合は、
以下のいずれかのコードを使用してください。

Sub 表示されているデータシートのみを処理する()

    Dim 処理シート As Worksheet
    For Each 処理シート In ThisWorkbook.Worksheets
    
        If 処理シート.Visible = True Then
            If Left(処理シート.Name, 3) = "データ" Then

                ' ここに表示シートへの処理
                Debug.Print 処理シート.Name
        
             End If
        End If
        
    Next
    
End Sub
Sub 表示されているデータシートのみを処理する()

    Dim 処理シート As Worksheet
    For Each 処理シート In ThisWorkbook.Worksheets
    
        If 処理シート.Visible = True _
        And Left(処理シート.Name, 3) = "データ" Then

            ' ここに表示シートへの処理
            Debug.Print 処理シート.Name
        
        End If
        
    Next
    
End Sub

 
表示されている かつ シート名が「データ」から始まる
など、2つの条件を判定する場合は、

  • Ifステートメントを二つ重ねて(ネストして)分岐する
  • ひとつのIfステートメントないでAnd演算子を用いて判定する

このいずれかの判定を行います。


判定に親子関係がなければどちらを用いても大差はありませんので、
読みやすいと思った方を採用してください。