「for each ws in worksheetsで対象シートを処理しない」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスがありました。
Excel VBAのFor Each~Next文で、特定のシートを処理対象から除外するには、どのようなコードを書けばいいのか探していた方による検索です。
シート名に特定文字列を含むシートを除外して処理するサンプルマクロ
除外したいシートを、どのように判定するかですが、名前・シート名を使うことが、まぁ、多いでしょうか。
複数のワークシートを作成し、いくつかのシート名を「test_除外するシート」のような、文字列「test」を含むものに変更してから、以下のSubプロシージャを実行してください。
Dim ws As Worksheet
For Each ws In Worksheets
If InStr(ws.Name, "test") = 0 Then
MsgBox ws.Name
End If
Next
End Sub
シート名が順番にメッセージボックスに表示されますが、シート名に「test」を含むものはメッセージボックスに表示されず、処理が終了します。
InStr関数は、拙著『VBAユーザーのためのPython超入門』でも登場する、ある文字列が別の文字列中に現れる位置を返す関数です。
InStr関数の戻り値が0ということは、指定した文字列が含まれないことを意味します。これを利用しているのが、上記Subプロシージャの、
If InStr(ws.Name, "test") = 0 Then
です。
シート名のさまざまな条件指定方法
もしも大文字の「TEST」の場合も処理を除外したいのであれば、上記の条件を、
If InStr(ws.Name, "test") = 0 Then
から、LCase関数を組み合わせた、
If InStr(LCase(ws.Name), "test") = 0 Then
にするなどの方法が考えられます。
もしもシート名の先頭4文字が「test」のシートを除外したいのであれば、上記の条件を、
Left関数を組み合わせた
If Left(ws.Name, 4) <> "test" Then
にするなどの方法が考えられます。
最終更新日時:2022-01-26 13:31
- Newer:ローカルウィンドウで既定の初期値を確認しましょう
- Older:TypeName関数で他のデータ型も確認しましょう
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » For Each In Worksheetsで特定の名前のシートを処理対象から除外するには