すべての市町村のシートがまとまっている状態のエクセルブックがあるとします。
すべてのシートの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を選ぶまで延々と続きます。
これでキーワードを指定して全自動を読み込むのがスマートですが、もっと複雑な条件にしたい場合はコードを書くのも大変です。
コードを書くより自分で目で見て選ぶ方がトータルで早いケースはとても多いです。









コメントを残す