「vba シート名 探す」
「エクセル マクロ シート名 検索」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
シート名を検索するExcelマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索です。
アクティブシートより右のシート名を検索するサンプルマクロ
検索して見つかったときにどうするのかによって、さまざまな仕様が考えられそうですが、アクティブシートより右に存在するシートを検索して、見つかったらそのシートを選択するというマクロを作成してみました。
Dim sh_find As String
Dim i As Long
Dim msg As String
sh_find = InputBox("検索するシート名を入力してください。")
If sh_find = "" Then Exit Sub
On Error GoTo ERR_HNDL
For i = ActiveSheet.Index + 1 To Sheets.Count
If Sheets(i).Name Like "*" & sh_find & "*" Then
Sheets(i).Select
Exit Sub
End If
Next i
msg = "指定された文字列をシート名に含むシートは、アクティブシートより右に存在しません。"
MsgBox msg
Exit Sub
ERR_HNDL:
Select Case Err.Number
Case 1004
msg = "見つかったシートは非表示のため選択できません。"
Case Else
msg = Err.Description & ":" & Err.Number
End Select
MsgBox msg
End Sub上記のマクロを実行すると、
「検索するシート名を入力してください。」
と記載されたインプットボックスが表示され、入力された文字列をシート名に含むシートを検索して、みつかったときにはそのシートを選択します。
サンプルマクロの解説
検索した文字列を含むシートが複数あったときにどうするのか、いろいろ考え方がありそうですが、ここでは最初に見つかったシートを選択するようにしました。
そのため、アクティブシートより右のシートだけを検索するという仕様にしました。
主たる処理はもちろんFor ~ Next文の部分です。
アクティブシートの右のシートから、一番左のシートまでループを開始し、
For i = ActiveSheet.Index + 1 To Sheets.Count
もし指定された文字列をシート名に含んでいたら、
If Sheets(i).Name Like "*" & sh_find & "*" Then
そのシートを選択してマクロを終了しています。
Sheets(i).Select
Exit Sub
指定された文字列を含むシートがアクティブシートより右に存在しなければ、メッセージボックスを表示してマクロを終了します。
msg = "指定された文字列をシート名に含むシートは、アクティブシートより右に存在しません。"
MsgBox msg
シートが非表示のときにシートを選択しようとするとエラーになってしまいますからメッセージを表示するようにエラー処理を入れています。
Select Case Err.Number
Case 1004
msg = "見つかったシートは非表示のため選択できません。"
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » シート名を検索するExcelマクロ