フィルターオプションの機能を使うにはAdvancedFilterメソッドを使用する。書式は下記の通りだ。
Rangeオブジェクト.AdvancedFilter Action:={検索結果の表示場所} ,CriteriaRange:={検索条件の書かれている範囲},Unique:=True|False
Uniqueは検索結果で重複するレコードの表示をTrueまたはFalseで指定。Trueの場合は重複コードを無視し、Falseの場合は重複コードも含めて表示する。
設定値 | 説明 |
---|---|
xlFilterCopy | フィルター処理したデータを新しい場所にコピー |
xlFilterInPlace | データをそのままリスト内に表示 |
参考「XlFilterAction 列挙(Excel)- MSDN」 |
図14のような表がある。
フィルターオプション機能を使うとB5〜E5に指定した検索条件を元にデータの抽出ができる。
「学年」は「3年」で「担当」が「綾瀬」のデータを抽出するにはリスト10のようなマクロを書く。
Option Explicit Sub フィルターオプションを使ったデータの抽出() Range("B7").CurrentRegion.AdvancedFilter _ Action:=xlFilterInPlace, _ CriteriaRange:=Range("B4:E5"), _ Unique:=False End Sub Sub フィルターオプションの解除() If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If End Sub
B7のセルを基準にAdvancedFilterメソッドを使う(3行目)。Actionには抽出したデータをリスト内に表示するよう指定し(4行目)、CriteriaRangeに検索条件を指定するセルの範囲を指定する(5行目)。Uniqueには、Falseを指定して重複するデータも表示させている(6行目)。「実行」ボタンに、このマクロを登録する。
フィルターオプションを解除するには、フィルターモードがオンになっていれば(9行目)、ShowAllDataメソッドで全てのデータを表示させる(10行目)。フィルターモードオプションがオフになる。
「フィルターモードオプションの解除」ボタンに、このマクロを登録する。実行すると図15のようになる。
図15からフィルターオプションを解除するには[フィルターオプションの解除]ボタンをクリックすると図14の下の表のように表示される。該当するデータがなかった場合は、リストに何も表示されない。
「データ操作」の処理は理解できただろうか。筆者は、VBAは初心者だがプログラムの経験があるので、この辺りまでは何とか理解できる。しかし、プログラムの初心者にとっては、難解なコードもあったかもしれない。できるだけ分かりやすく解説したつもりだが、皆さんはどう受けとめただろうか。筆者としては気になるところだ。
また、「データ操作」のマクロは明日からでも実務に応用できる処理も紹介したつもりだ。ぜひ、今回紹介するマクロを自分で書いて動かし、できればカスタマイズして動作を確認してほしい。
次回は、今回紹介した「データ操作」に関連して、統計データの「グラフ操作」について解説する予定だ。
【2016/8/18】Windows 10、Excel 2016に対応しました。
PROJECT KySS 薬師寺 国安(やくしじ くにやす)
1950年生まれ。フリーVBプログラマ。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。
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)。
PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット
Copyright © ITmedia, Inc. All Rights Reserved.