「excel マクロ 特定文字を含むシートを指定する」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
この検索だけでは、具体的に何がしたかったのかハッキリしませんが、参考になりそうなマクロをご紹介しておきます。
シート名指定した文字列が含まれているシートだけを選択するサンプルマクロ
たくさんのシートが存在しているときに、指定した文字列がシート名に含まれているものを、すべて選択するマクロです。
Const FIND_STR = "2013年" ' 検索する文字列 Dim find_flg As Boolean ' 見つかったシートが1枚目か否か判定するフラグ
Dim sh As Object
find_flg = False
For Each sh In Sheets
If sh.Name Like "*" & FIND_STR & "*" Then
If find_flg = False Then ' 見つかった1枚目のシートの場合
sh.Select Replace:=True
find_flg = True
Else ' 見つかった2枚目以降のシートの場合
sh.Select Replace:=False
End If
End If
Next sh
End Sub
定数・FIND_STRで、選択したいシートのシート名の文字列を指定するようにしています。
Const FIND_STR = "2013年"
上記のサンプルはシート名に「2013年」という文字列が含まれているものだけを選択する例です。
例えば、
2013年10月
2013年11月
2013年12月
2014年1月
2014年2月
といった名前のシートがたくさん存在しているときに、シート名に「2013年」という文字列が含まれているシートだけを選択するイメージです。
サンプルマクロの解説
すべてのシートに対してループを回し、
For Each sh In Sheets
定数・FIND_STRに指定した文字列が、シート名に含まれている場合に、
If sh.Name Like "*" & FIND_STR & "*" Then
シートを選択しています。
複数シートの選択は、Selectメソッドの引数・ReplaceにFalseを指定することで、元々選択されているシートの選択を解除せず追加することで可能になります。
上記のマクロでは、
If sh.Name Like "*" & FIND_STR & "*" Then
の中に更に、変数・find_flg による判別を行う処理が入っています、
ここをもっとシンプルにして、
If sh.Name Like "*" & FIND_STR & "*" Then
sh.Select Replace:=False
End If
だけでいいのではないかと感じる方もいらっしゃるかもしれませんが、それではダメです。
もしも、シンプルな
If sh.Name Like "*" & FIND_STR & "*" Then
sh.Select Replace:=False
End If
というコードにすると、本来は選択対象ではない、例えば「2014年1月」というシートがアクティブな状態からマクロを実行したときに、不具合が発生します。
マクロ実行時にアクティブだった「2014年1月」という、シート名に「2013年」が含まれていないものまで選択されてしまうことになります。
この不具合を避けるためには、最初に見つかったシートなのかどうかを判別する必要があります。
それが、変数・find_flgと「If find_flg = False Then」というIf文の入っている理由です。
まず、変数・find_flgをFalseにしておいて、
find_flg = False
最初に見つかったシートの場合は、
If find_flg = False Then
元々選択されていたシートの選択を解除してから、その見つかったシートを選択し、
sh.Select Replace:=True
変数・find_flgをTrueにしています。
find_flg = True
見つかったのが2枚目以降のシートの場合は、既に選択されているシートの選択を解除しないようにして、その見つかったシートを選択しています。
Else
sh.Select Replace:=False
- Newer:入門書で頭が混乱するより理解が早かった
- Older:文字の入力されていないプレースホルダーを非表示にするパワポマクロ
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 名前に特定の文字列が含まれるシートだけ選択するExcelマクロ