Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 名前に特定の文字列が含まれるシートだけ選択するExcelマクロ

名前に特定の文字列が含まれるシートだけ選択するExcelマクロ

対象:Excel2003, Excel2007, Excel2010, Excel2013

「excel マクロ 特定文字を含むシートを指定する」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

この検索だけでは、具体的に何がしたかったのかハッキリしませんが、参考になりそうなマクロをご紹介しておきます。

[スポンサードリンク]

シート名指定した文字列が含まれているシートだけを選択するサンプルマクロ

たくさんのシートが存在しているときに、指定した文字列がシート名に含まれているものを、すべて選択するマクロです。

Sub 名前に指定した文字列が含まれているシートだけを選択する()
 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

関連語句
特定の文字を含むシートをアクティブにする, VBA, Visual Basic for Applications

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 名前に特定の文字列が含まれるシートだけ選択するExcelマクロ

「Sheets・Worksheet」の記事一覧

検索


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

.