Excelのシート番号やシート名の一部を入力することで、目的のシートへ素早く移動できるマクロを紹介します。
(シート番号による移動や、部分一致、正規表現にも対応)
1つのブックにたくさんのシートがある場合に、効果を発揮します。
Excelの標準機能でシートを移動しようとすると・・・
Excelの標準機能でシートを移動する場合、下記の方法が一般的かと思います。
- シート見出しの左側にある「◀」や「▶」をクリックして、目的のシートが現れたら、シート見出しをクリック
- シート見出しの左側にある「◀」や「▶」を右クリックして表示される、[シートの選択]ダイアログから目的のシートを選択して移動
- キーボードのCtrl+ PageUp、Ctrl+PageDownを押して、左右のシートに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
マクロの作成方法は、下記が参考になります。
使い方
ALT+F8を押して、マクロダイアログを表示します。
リストの「シート検索」を選択して、実行ボタンを押します。
検索文字列を入力するボックスが表示されます。
下表を参考にして、シートの移動方法に応じた文字列を入力します。
Enterキーまたは「OK」ボタンを押すと、入力内容にマッチするシートに移動します。
シートの移動方法 | 入力内容 | 入力例 |
---|---|---|
先頭(いちばん左) | <(Shift+,(カンマ)) | < |
最後(いちばん右) | >(Shift+.(ピリオド)) | > |
シート番号指定 | #+数値 | #3(左から3番目のシート) |
シート名指定 (部分一致) | シート名の一部 | heet3 |
シート名指定 (正規表現) | 後述する「正規表現の補足」を参照 | 後述する「正規表現の補足」を参照 |
正規表現の補足
検索文字列に正規表現を使用することで、より柔軟にシート名が指定できます。
よく使いそうな正規表現を下表に示します。
正規表現 | 正規表現の意味 | 入力例 | マッチするシート名の例 |
---|---|---|---|
^ | シート名の先頭 | ^S | Sheet Sweet |
$ | シート名の末尾 | t1$ | Sheet1 Sweet1 |
? | 直前の文字が 0回または1回現れる | Sh?e | Set Shell |
* | 直前の文字の 0回以上の繰り返し | Me* | Mail Meat Meet |
. | 任意の1文字 | a.e | Made Make |
+ | 直前の文字の 1回以上の繰り返し | She+ | Shell Sheet |
.* | 任意のn文字 | S.*1 | Sale1 Sheet1 |
\d | 半角数値 | t\d | Sheet1-2 |
\D | 半角数値でない文字 | \D2 | Sheet1-2 |
[] | いずれかの文字を含む | s[hw]eet | Sheet1 Sweet1 |
制限事項
さらに快適に
今回紹介したマクロを個人用マクロブックに登録すると、どのブックからでもマクロが実行できて大変便利です。
さらに、登録したマクロにショートカットキーを設定すると、どのブックからでもキー操作1発でマクロが実行できるので最強です。
ぜひ、下記の投稿をチェックしてみてください。
コメント