Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » For Each In Worksheetsで特定の名前のシートを処理対象から除外するには

For Each In Worksheetsで特定の名前のシートを処理対象から除外するには

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2006 ビルド13001.20384 Microsoft Store)

「for each ws in worksheetsで対象シートを処理しない」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスがありました。

Excel VBAのFor Each~Next文で、特定のシートを処理対象から除外するには、どのようなコードを書けばいいのか探していた方による検索です。

[スポンサードリンク]

シート名に特定文字列を含むシートを除外して処理するサンプルマクロ

除外したいシートを、どのように判定するかですが、名前・シート名を使うことが、まぁ、多いでしょうか。

複数のワークシートを作成し、いくつかのシート名を「test_除外するシート」のような、文字列「test」を含むものに変更してから、以下のSubプロシージャを実行してください。

Sub シート名にtestを含むワークシートを除外して処理する()
 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

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » For Each In Worksheetsで特定の名前のシートを処理対象から除外するには

「Sheets・Worksheet」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.