シートの絞り込みを簡単に実行することで目的のシートを探しやすくする
前回のシート一覧表の作成とシート間の移動に続いて、確認したいシートのみ表示する機能を考えてみました。
この機能をつけることでたくさんのシートの中から目的のシートに素早く移動することができるようになります。
シートの表示・非表示切り替えのプロパティ
シートの表示・非表示は「Visible」プロパティで変更することができます。
例えば1つ目のシートを非表示にするには下記のExcelVBAコードを実行します。
Sheets(1).Visible = False
End sub
Trueを指定すると非表示を解除することができます。
スポンサーリンク
シートの絞り込みを行う仕組み
今回私が考えたシートの絞り込みはシートの一覧表の絞り込みとリンクしたものを想定しています。
つまりシートの一覧表の表示を絞り込む操作をすると、同時にシートの絞り込みも行われるという機能です。
検索ワードを入力するセルを用意しておいて入力すると、それでシート名一覧表のフィルターがかかり、かつ実際にシートも非表示になる流れで動くように準備します。
検索ワードを入力するのは下記の通り、B1セル(=Cells(1, 2))です。
B1セル(=Cells(1, 2))を削除するとフィルターは解除されます。
また、イベントプロシージャのWorksheet_Changeイベントで、検索ワードを入力・変更・削除した場合に自動で絞り込みが行われるようにしました。
シートの絞り込みを行うExcelVBAコード
シートの絞り込みを行うExcelVBAコードは下記の通りです。
Dim i, x, y
’シート名一覧の開始位置をxとする
For i = 1 To Cells(1000000, 1).End(xlUp).Row
If Cells(i, 1) = “シート名” Then
x = i
Exit For
End If
Next i
’シート名一覧の開始位置が取得できなければ終了
If x = 0 Then Exit Sub
’抽出用シートのシート番号をyとする
For i = 1 To Worksheets.Count
If Sheets(i).Name = ActiveSheet.Name Then
y = i
Exit For
End If
Next i
If Cells(1, 2) <> “” Then
Range(Cells(x, 1), Cells(1000000, 1).End(xlUp)).AutoFilter 1, “*” & Cells(1, 2) & “*”
Else
If ActiveSheet.AutoFilterMode = True Then
Cells(x, 1).AutoFilter
End If
End If
’シートの名前が最低1つでも表示されているなら実行
If Cells(x + 1, 1) <> “” Then
If ActiveSheet.AutoFilterMode = True Then
For i = y + 1 To Worksheets.Count
’Sheets(y + 1)のとき、Rows(x + 1)なので、Sheets(i)に対応した行はRows(i - y + x)
If Rows(i - y + x).Hidden = True Then
Sheets(i).Visible = False
Else
Sheets(i).Visible = True
End If
Next i
Else
For i = y + 1 To Worksheets.Count
Sheets(i).Visible = True
Next i
End If
End If
End Sub
一覧表の取得時と同様に、一覧表の作成位置・一覧表シートの位置を可変にするため、変数「x」「y」を設定しています。
算数・数学の問題なので、わかりにくい場合は固定の数字を入力して扱っても良いと思います。
また、検索ワードを変更した場合のみイベントプロシージャが起動するように、条件分岐を用いて下記の通り検索用シートにWorksheet_Changeを作成しました。
If Target.Row = 1 And Target.Column = 2 Then
Call シート絞り込み
End If
End Sub
これで検索ワードを入力するとシートの絞り込みが行われるようになりました。
次回はシートの並び替えのExcelVBAコードをご紹介します。
コメント