VBAの勉強を始めてみた

色々試しています。

大量のシートから目的のシートを探して表示させる方法

エクセルを使って仕事をしていると、一つのブックにシートが多くなりすぎて、目的のシートを探すのに手間取ってしまうことがあります。
自分で作った資料ならまだしも、余所から頂いた資料であればなおさらです。
1秒を争うような場面で、目的のシートが中々見つけられないと、ほんとイライラ(ヒヤヒヤ、ドキドキ)します。
なので、大量にあるシートから目的のシートを簡単に探して、表示させる方法を紹介します。

目次

 

標準機能を使う方法

シートが多くなると、タブが1画面に表示しきれなくなり、左右にスクロールしなければシート名を視認することができなくなります。
このような時は、左下の三角マークの場所で右クリックすると、全シート名を一覧表示することができます。

f:id:kouten0430:20180503143657j:plain


ここからシート名を選択してOKすることで、目的のシートを表示することができます。

 

マクロを使う方法

標準機能を使った方法でも充分事足りるとは思いますが、万が一、シートが数百枚あった場合には探し出すのに少し苦労するかもしれません。
そんなときはマクロで文字列検索させましょう。

どのシートでもいいので、マクロを実行します。
Zを含むシートを検索し、表示させます。

f:id:kouten0430:20180503143741j:plain

 

このシートでよければ「はい」、次を検索する場合は「いいえ」を選択します。

f:id:kouten0430:20180503143802j:plain

 

検索に一致するものがなければ、その旨をメッセージ表示し終了します。

 

Sub 目的のシートを検索しアクティブにする()
    '大文字と小文字を区別しません。
    '半角と全角を区別しません。
    Dim sw As String
    Dim myWs As Worksheet
    Dim mb As Integer
    
    sw = InputBox("検索する文字列")
        If sw = "" Then '空白でOKした場合、キャンセルした場合の処理
            Exit Sub
        End If
    
    For Each myWs In Worksheets
        If StrConv(StrConv(myWs.Name, vbLowerCase), vbNarrow) Like "*" & _
        StrConv(StrConv(sw, vbLowerCase), vbNarrow) & "*" Then   '半角小文字に統一し、部分一致条件でシート名を検索する
            myWs.Activate
            
            mb = MsgBox(prompt:="このシートでよければ「はい」を、" & vbCrLf & _
            "次を検索するには「いいえ」を押して下さい。", Buttons:=vbYesNo)
            
            If mb = 6 Then  '「はい」を選択した場合はプロシージャを終了する
                Exit Sub
            End If
            
        End If
    Next myWs
    
    MsgBox "検索に一致するものはありませんでした。"
    
End Sub

※SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら