【VBA】ワークブックを開いてすべてのシートを処理する。それを延々と繰り返す。

すべての市町村のシートがまとまっている状態のエクセルブックがあるとします。

すべてのシートのA1セルの値を取得したり、行を挿入したりするときに使うコードです。

Sub ReadAllSheets()

    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ThisWorkbook

    For Each ws In wb.Worksheets
        '好きな処理
        MsgBox ws.Name
    Next ws

End Sub

簡単ですね。

For Eachはよく使うので必ず覚えましょう。

wsはループごとに違うシートが入ります。

Sheet1,Sheet2,…と並んでいる場合は、

1ループ目はwsにはSheet1が入ります。

2ループ目はwsにはSheet2が入ります。

すべてのシートを読み込んだらループを抜けて終わります。

今回はwbをThisworkBookに、処理をシートの名前を表示としていますが、アレンジして使ってください。

エクセルブックを選択してこの処理を好きなだけ繰り返したい

シートに整理するのが面倒、エクセルブックが色々なところに転がっているなど、下準備が面倒で自分で選んで処理したいときは次のコードを使います。

Sub OpenWbAndReadAllSheets()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim filePath As String
 
    filePath = SelectExcelFile()

    ' ファイルパスが有効かどうかをチェック
    If filePath = "" Then Exit Sub

    Set wb = Workbooks.Open(filePath)

    For Each ws In wb.Worksheets
        ' 好きな処理
        MsgBox ws.Name
    Next ws

    wb.Close SaveChanges:=False
End Sub

Function SelectExcelFile() As String
    Dim filePath As String
    
    ' ファイルの選択ダイアログを表示し、ファイルパスを取得
    filePath = Application.GetOpenFilename("Excelファイル (*.xls; *.xlsx), *.xls; *.xlsx")
    
    ' ダイアログがキャンセルされた場合は空の文字列を返す
    If filePath = "False" Then
        SelectExcelFile = ""
    Else
        SelectExcelFile = filePath
    End If
End Function

Sub Main()
    Do
        Call ReadAllSheetsAndRepeat
        
        ' ダイアログを表示して、続けるかどうかを聞く
        If MsgBox("続けますか?", vbYesNo) = vbNo Then
            MsgBox "終了します"
            Exit Do
        End If
    Loop
End Sub

ブックを読み込んで処理→続ける?→YES→ブックを読み込んで処理

というループがNoを選ぶまで延々と続きます。

これでキーワードを指定して全自動を読み込むのがスマートですが、もっと複雑な条件にしたい場合はコードを書くのも大変です。

コードを書くより自分で目で見て選ぶ方がトータルで早いケースはとても多いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA