業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、AutoFilterメソッドを使い、オートフィルターを設定したり解除したりする方法と、オートフィルターに絞り込み条件を設定してデータを抽出する方法について。
今回は「オートフィルター」に関するTipsを紹介する。今回の2つの「オートフィルター」のTipsは、自分の必要とするデータを抽出したい場合に利用すると便利な機能だ。
「オートフィルター」を設定すると、見出し項目にドロップダウンリストを表す「▼」マークが表示され、それをクリックすることで、表示される項目から、各種検索方法を指定できるようになる(図1参照)。
今回は「社員名簿」というシートを作成し、図2のように「オートフィルターの設定」ボタンを配置しておく。このボタンをクリックすると「A2」のセル(見出し)にオートフィルターが設定され、データの絞り込み抽出が可能になる。
「オートフィルター」を設定するには、下記のようにAutoFilterメソッドを使う。
{オブジェクト}.AutoFilter
{オブジェクト}には、対象となるRangeオブジェクトを指定する。
図2の「オートフィルターの設定」ボタンをクリックし、オートフィルターを表示させるコードはリスト1になる。
Sub オートフィルターの設定() Range("A2").AutoFilter End Sub
設定したオートフィルターを解除する場合も、この同じコードを使用する。「オートフィルターの設定」と「オートフィルターの解除」には、リスト1のコードを指定するということだ。
全く同じコードだが、AutoFilterのコードを、ボタンで切り替えることで、「設定と解除」が可能になる。
VBE(Visual Basic Editor)を起動してModule1内に「オートフィルターの設定」というプロシージャを作成し、リスト1のコードを記述する。
このリスト1のマクロを、「オートフィルターの設定」ボタンに関連付ける。また、「オートフィルターの解除」ボタンも配置して、同じマクロを関連付けておく。
まず、「絞り込みメニュー」と「オートフィルターの絞り込み結果」というシートを追加しておく。新しいシートを追加するには図3の赤い○で囲ったアイコンをクリックする。
「絞り込みメニュー」のシートには、「氏名」で検索できるように氏名を入力するセルと「実行」ボタンを配置しておく(図3)。
「オートフィルターの絞り込み結果」のシートには、図4のように、「個人情報」のデータと「オートフィルターの解除」ボタンを配置しておく。
オートフィルターを設定してデータを絞り込むには、下記のようにAutoFilterメソッドに引数を指定する。
{オブジェクト}.AutoFilter Field:={列番号},Criteria1:={抽出対象となる文字列}
{オブジェクト}には、対象となるRangeオブジェクトを指定する。「Field」には、対象となるフィールド番号(列番号)を指定する。「Criteria1」には、抽出条件となる文字列を指定する。
このAutoFilterメソッドに各引数を指定して、VBE(Visual Basic Editor)で、リスト2のようなコードを記述する。これで、図3の「氏名」を指定して「実行」ボタンをクリックすると、指定した氏名が「オートフィルター」で抽出表示される仕組みが完成する。
Sub 氏名で絞り込み検索() If Range("C2").Value = "" Then MsgBox "検索キーを指定してください。" Exit Sub Else Worksheets("オートフィルターの絞り込み結果").Range("A5").AutoFilter Field:=2, Criteria1:=Range("C2").Value Worksheets("オートフィルターの絞り込み結果").Select End If End Sub
「絞り込みメニュー」シートの「C2」セルに「氏名」が入力されていなかった場合は、警告メッセージを表示して処理を抜ける。それ以外は以下の処理を実行する。
「オートフィルターの絞り込み結果」シートのA5のセル(見出し)に対して、AutoFilterメソッドを使った「Field」に「氏名」の列番号である「2(B列)」を指定し、「Criteria1」には「絞り込みメニュー」シートの「C2」のセルに入力された値を指定する。今回は、完全一致検索になるので、完全な「氏名」を指定する必要がある。
このリスト2のマクロを、「絞り込みメニュー」シートの「実行」ボタンに関連付ける。同様に、「オートフィルターの絞り込み結果」シートの「オートフィルターの解除」ボタンには、リスト1の「オートフィルターの設定」マクロを関連付ける。
次回も引き続き、「オートフィルター」関連のTipsを紹介する予定だ。お楽しみに。
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Copyright © ITmedia, Inc. All Rights Reserved.