Excel

Excelシートを検索する便利なマクロ

Excel

Excelのシート番号やシート名の一部を入力することで、目的のシートへ素早く移動できるマクロを紹介します。
(シート番号による移動や、部分一致、正規表現にも対応)

1つのブックにたくさんのシートがある場合に、効果を発揮します。

Excelの標準機能でシートを移動しようとすると・・・

Excelの標準機能でシートを移動する場合、下記の方法が一般的かと思います。

  • シート見出しの左側にある「◀」や「▶」をクリックして、目的のシートが現れたら、シート見出しをクリック
  • シート見出しの左側にある「◀」や「▶」を右クリックして表示される、[シートの選択]ダイアログから目的のシートを選択して移動
  • キーボードのCtrlPageUpCtrlPageDownを押して、左右のシートに1つずつ移動

通常は上記のどの方法でも不自由ありません。
ただ、シートの数が多くなると、目的のシートへ移動するのが大変です。

動作イメージ

今回紹介するマクロを使うと、下記のイメージで、素早く目的のシートへ移動できます。

マクロのソース

Sub シート検索()

    Dim buf As String
    Dim slctFlg As Boolean
    Dim i As Integer
    Dim cnt As Integer
    Dim shtNmbr As Integer
    Dim maxShtNmbr As Integer
    
    slctFlg = False
    maxShtNmbr = ActiveWorkbook.Worksheets.Count
    
    buf = InputBox("検索する文字列を入力してください。" & vbCrLf & "(""#""+シート番号/シート名の一部/正規表現)", "シート検索")
    If "" = buf Then
        slctFlg = True
    ElseIf "#" = Left(buf, 1) Then
        'シート番号指定
        shtNmbr = Val(Mid(buf, 2))
        If 1 <= shtNmbr And shtNmbr <= maxShtNmbr Then
            cnt = 0
            For i = 1 To maxShtNmbr
                If ActiveWorkbook.Sheets(i).Visible Then
                    cnt = cnt + 1
                    If cnt = shtNmbr Then
                        ActiveWorkbook.Sheets(i).Select
                        slctFlg = True
                        Exit For
                    End If
                End If
            Next i
        End If
    ' 左端シート
    ElseIf "<" = buf Then
        ActiveWorkbook.Sheets(1).Select
        slctFlg = True
    ' 右端シート
    ElseIf ">" = buf Then
        ActiveWorkbook.Sheets(maxShtNmbr).Select
        slctFlg = True
    ' 正規表現
    Else
        For i = 1 To maxShtNmbr
            If TestReg(ActiveWorkbook.Sheets(i).Name, buf) Then
                If ActiveWorkbook.Sheets(i).Visible Then
                    ActiveWorkbook.Sheets(i).Select
                    slctFlg = True
                    Exit For
                End If
            End If
        Next i
    End If
    
    '該当なし
    If Not slctFlg Then
        MsgBox "該当するシートが見つかりません。"
    End If
    
End Sub

' 文字列検索(正規表現)
Function TestReg(str As String, ptn As String) As Boolean

    Dim re As Variant
    Dim flg As Boolean
    
    Set re = CreateObject("VBScript.RegExp")
    On Error GoTo errReg
    With re
        .Pattern = ptn
        .ignorecase = True
        .Global = True
        If .Test(str) Then
            flg = True
        End If
    End With
    
errReg:
    Set re = Nothing
    TestReg = flg

End Function

マクロの作成方法は、下記が参考になります。

使い方

ALTF8を押して、マクロダイアログを表示します。
リストの「シート検索」を選択して、実行ボタンを押します。

検索文字列を入力するボックスが表示されます。

下表を参考にして、シートの移動方法に応じた文字列を入力します。
Enterキーまたは「OK」ボタンを押すと、入力内容にマッチするシートに移動します。

シートの移動方法入力内容入力例
先頭(いちばん左)<Shift(カンマ))<
最後(いちばん右)>Shift(ピリオド)) >
シート番号指定#+数値#3(左から3番目のシート)
シート名指定
(部分一致)
シート名の一部heet3
シート名指定
(正規表現)
後述する「正規表現の補足」を参照 後述する「正規表現の補足」を参照

正規表現の補足

検索文字列に正規表現を使用することで、より柔軟にシート名が指定できます。
よく使いそうな正規表現を下表に示します。

正規表現正規表現の意味入力例マッチするシート名の例
^シート名の先頭^SSheet
Sweet
$シート名の末尾t1$Sheet1
Sweet1
?直前の文字が
0回または1回現れる
Sh?eSet
Shell
*直前の文字の
0回以上の繰り返し
Me*Mail
Meat
Meet
.任意の1文字a.eMade
Make
+直前の文字の
1回以上の繰り返し
She+Shell
Sheet
.*任意のn文字S.*1Sale1
Sheet1
\d半角数値t\dSheet1-2
\D半角数値でない文字\D2Sheet1-2
[]いずれかの文字を含むs[hw]eetSheet1
Sweet1
赤文字部分が、マッチする箇所です。

制限事項

【当マクロの制限事項

  • シート名の大文字と小文字は、区別しません。
  • 半角文字と全角文字は、区別します。
  • 入力内容にマッチするシートが複数ある場合、最初に見つかったシートを表示します。
  • 複数のシートがマッチする場合、1つのシートがマッチするよう入力内容を工夫したり、正規表現を使ってみてください。

さらに快適に

今回紹介したマクロを個人用マクロブックに登録すると、どのブックからでもマクロが実行できて大変便利です。

さらに、登録したマクロにショートカットキーを設定すると、どのブックからでもキー操作1発でマクロが実行できるので最強です。
ぜひ、下記の投稿をチェックしてみてください。

コメント

タイトルとURLをコピーしました