【Excel/VBA のこと 17】
こんな表を扱うことはあるでしょうか?
タイトル行が複数分類されている表です。
この表にフィルタ設置すると1行目に設置されてしまい、
非常に使いづらくなってしまいます。
でも、設置したいのは3行目です。
このような表にも対応できる、ツールを作りました。
外観
ラベル x 3
テキストボックス x 3
コマンドボタン x 2
シンプルでしょ。
マクロ
私は、マクロを実行させたい行 or 列を含むセルを選択して、
そのセルのアドレスを基準にして記述するマクロを良く作ります。
マクロ使用手順として、まず正しいセルを選択しておく
としています。(個人使用の場合のみ)
以下のマクロはフォームと、各部品に記述してください。
----------------------------------------
Option Explicit
’モジュールレベル変数
'ここで宣言された変数は同一モジュール内で使用できる
Dim FirstC As Long
Dim FilterR As Long
Dim LastC As Long
----------------------------------------
フォーム初期化
Private Sub UserForm_Initialize()
'選択したセルの行、列を基準に既定値を入力する
FilterR = Selection.Row '選択セルの行
FirstC = 1 '列Aを先頭行として入力する
LastC = Cells(FilterR, Columns.Count).End(xlToLeft).Column '選択セルの最終行
txtFilterR.Text = FilterR
txtFirstC.Text = FirstC
txtLastC.Text = LastC
'列表示をアルファベットから数字に変更して、
最終列を数字で入力してもらうよう促す
Application.ReferenceStyle = xlR1C1
End Sub
----------------------------------------
閉じるボタン
Private Sub cmdClose_Click()
End
End Sub
----------------------------------------
設置ボタン
Private Sub cmdGo_Click()
Dim LastR As Long
'ここの変数は「モジュールレベル変数」として定義しているので、
'個別のプロシージャ内で定義する必要がない
FilterR = txtFilterR.Text
FirstC = txtFirstC.Text
LastC = txtLastC.Text
'最終行を列Aで取得する
LastR = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(FilterR, FirstC), Cells(LastR, LastC)).AutoFilter
'列表示を数字からアルファベットに変更(表示をもとに戻す)
Application.ReferenceStyle = xlA1
End Sub
フォームを表示させるマクロを「個人用マクロブック」の
標準モジュールに記述してください。
Sub任意行にFilter設置()
frmSetFilterTool.Show
End Sub
これで、指定行の必要な列にのみフィルタを設置できます。
後は、 リボンに登録していつでも、どんなファイルにも使えるようにします。
個人用マクロブックについてはこちら
リボンに登録についてはこちら
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/