指定セル範囲をフィルター処理する
- yuji fukami
- 2024年12月28日
- 読了時間: 3分
更新日:2024年12月29日
<概要>
今回は指定セル範囲をフィルター処理する汎用プロシージャの紹介です。
セル範囲のフィルター処理はRangeオブジェクトのAutoFilterメソッドをして利用すれば可能ですが、これにこれを利用する場合の記述のルールを毎回思い出すのが面倒くさいっていうのが今回紹介する汎用プロシージャを作った背景です。
具体的なルールとしてフィルターの条件を指定するCriteria1、Criteria2の引数において数値の場合は、
・○より大きい → ">[値]"
・○より小さい → "<[値]"
・○以上 → ">=[値]"
・○以下 → "<=[値]"
・○と等しい → "=[値]" , "=[文字列]"
・○と等しくない → "<>[値]" , "<>[文字列]"
文字列の場合は
・○を含む → "=*[文字列]*"
・○を含まない → "<>*[文字列]*"
となります。
これらの記述が不要になるように紹介する汎用プロシージャでは次のような記述ができるようにしております。
まず条件の設定は、第3引数「Condition1」で、下の画像のように指定の文字列から選択できるようにしています。また、2つ目の条件を入れる場合は、第6引数「Condition2」で同じように条件を選ぶことができます。
また条件で与える文字列や数値は第2引数「Filter1」で直接入力ができます。同様に、2つ目の条件においては第5引数「Filter2」にで直接入力ができるようになってます。

<実行例>
実際の実行例を紹介します。
まず次のような表が用意されているとします。データは個人情報テストデータジェネレーターを利用しています。https://testdata.userlocal.jp/

既にボタンなどを設置してありますが、こちらはサンプルファイルとして用意しておりますので、そちらもダウンロードしてください。
実行としては下記の3つを用意しています。
・男でフィルター
・30代でフィルター
・○○子でフィルター
まず「男でフィルター」のコードは次のようになっています。
まず可読性と保守性を高めるために。表におけるヘッダーはEnumを定義しております。
まだ記述の簡素化を目的にセル範囲はCurrentRegionを使用していますが。 CurrentRegionは表以外の範囲に少しでも関係ない入力セルがある場合に範囲がずれてしまうので、極力使わないようにしましょう。
またフィルターを設置するまえにすでに設定してあるフィルターを解除するための処理を追加しております。こんな感じでこの処理をResetFilterという名前の汎用プロシージャを使っていますがこちらも、コードを紹介しておきます。
実行結果は次のようになります。

「30代でフィルター」のコードは次のようになります。
実行結果は次のようになります。

「○○子でフィルター」のコードは次のようになります。
実行結果は次のようになります。

<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。
Comments