連載
» 2014年07月09日 18時00分 UPDATE

VBA/マクロ便利Tips:Excelのオートフィルターでデータ抽出条件を設定/解除

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、AutoFilterメソッドを使い、オートフィルターを設定したり解除したりする方法と、オートフィルターに絞り込み条件を設定してデータを抽出する方法について。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


 今回は「オートフィルター」に関するTipsを紹介する。今回の2つの「オートフィルター」のTipsは、自分の必要とするデータを抽出したい場合に利用すると便利な機能だ。

 「オートフィルター」を設定すると、見出し項目にドロップダウンリストを表す「▼」マークが表示され、それをクリックすることで、表示される項目から、各種検索方法を指定できるようになる(図1参照)。

ExcelVBA7Tips7_02.png 図1 オートフィルターを表示し、「住所」を「愛媛県」に絞って抽出した

オートフィルターを設定したり解除したりする

 今回は「社員名簿」というシートを作成し、図2のように「オートフィルターの設定」ボタンを配置しておく。このボタンをクリックすると「A2」のセル(見出し)にオートフィルターが設定され、データの絞り込み抽出が可能になる。

ExcelVBA7Tips7_01.png 図2 「社員名簿」のシート上に「オートフィルターの設定」ボタンを配置した

 「オートフィルター」を設定するには、下記のようにAutoFilterメソッドを使う。

AutoFilterメソッドの書式

{オブジェクト}.AutoFilter


 {オブジェクト}には、対象となるRangeオブジェクトを指定する。

 図2の「オートフィルターの設定」ボタンをクリックし、オートフィルターを表示させるコードはリスト1になる。

Sub オートフィルターの設定()
  Range("A2").AutoFilter
End Sub
リスト1 オートフィルターを表示するコード

 設定したオートフィルターを解除する場合も、この同じコードを使用する。「オートフィルターの設定」と「オートフィルターの解除」には、リスト1のコードを指定するということだ。

 全く同じコードだが、AutoFilterのコードを、ボタンで切り替えることで、「設定と解除」が可能になる。

 VBE(Visual Basic Editor)を起動してModule1内に「オートフィルターの設定」というプロシージャを作成し、リスト1のコードを記述する。

 このリスト1のマクロを、「オートフィルターの設定」ボタンに関連付ける。また、「オートフィルターの解除」ボタンも配置して、同じマクロを関連付けておく。

ExcelVBA7Tips7_02.png 実行結果(図1再掲)

オートフィルターに絞り込み条件を設定してデータ抽出

 まず、「絞り込みメニュー」と「オートフィルターの絞り込み結果」というシートを追加しておく。新しいシートを追加するには図3の赤い○で囲ったアイコンをクリックする。

 「絞り込みメニュー」のシートには、「氏名」で検索できるように氏名を入力するセルと「実行」ボタンを配置しておく(図3)。

ExcelVBA7Tips7_03.png 図3 「氏名」で検索できるように氏名を入力するセルと「実行」ボタンを配置した

 「オートフィルターの絞り込み結果」のシートには、図4のように、「個人情報」のデータと「オートフィルターの解除」ボタンを配置しておく。

ExcelVBA7Tips7_04.png 図4 「個人情報」のデータと「オートフィルターの解除」ボタンを配置した

 オートフィルターを設定してデータを絞り込むには、下記のようにAutoFilterメソッドに引数を指定する。

引数を指定する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
リスト2 「氏名」でオートフィルターの絞り込み結果を表示するコード

 「絞り込みメニュー」シートの「C2」セルに「氏名」が入力されていなかった場合は、警告メッセージを表示して処理を抜ける。それ以外は以下の処理を実行する。

 「オートフィルターの絞り込み結果」シートのA5のセル(見出し)に対して、AutoFilterメソッドを使った「Field」に「氏名」の列番号である「2(B列)」を指定し、「Criteria1」には「絞り込みメニュー」シートの「C2」のセルに入力された値を指定する。今回は、完全一致検索になるので、完全な「氏名」を指定する必要がある。

 このリスト2のマクロを、「絞り込みメニュー」シートの「実行」ボタンに関連付ける。同様に、「オートフィルターの絞り込み結果」シートの「オートフィルターの解除」ボタンには、リスト1の「オートフィルターの設定」マクロを関連付ける。

ExcelVBA7Tips7_05.png 図5 「獅子善助」の氏名を指定して、オートフィルターで絞り込まれた結果が表示された

 次回も引き続き、「オートフィルター」関連のTipsを紹介する予定だ。お楽しみに。

著者プロフィール

kuniyasu.jpg

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。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© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。