top of page

​タグ一覧

配列処理(73)

階層化フォーム(33)

ファイル操作(28)

開発事例(22)

シート・セル操作(18)

図形操作(13)

コード自動生成(10)

ユーザーフォーム(9)

文字列操作(8)

設計思想(7)

開発効率化(6)

数学(6)

GAS(5)

アニメーション(5)

技術解説(4)

講座実施報告(5)

イミディエイトウィンドウ(4)

Googleスプレッドシート(4)

副業(4)

クリップボード(4)

条件付き書式(4)

その他(4)

ココナラ(3)

小説(3)

HTML(3)

JavaScript(3)

OneDrive(2)

イベントプロシージャ(2)

Enum(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Outlook(2)

介護(2)

Discord(2)

シフト表(2)

LookerStudio(2)

日報(2)

カレンダー(2)

罫線(2)

パズル(2)

小ネタ(2)

コード解説(2)

クラスモジュール(2)

ステータスバー(1)

コード解析(1)

バックアップ(1)

可変長引数配列(1)

ブック処理(1)

スクレイピング(1)

スプレッドシート(1)

coconala(1)

リボン登録マクロ(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

リボン(1)

超勉強会(1)

スピログラフ(1)

図名描写(1)

連想配列(1)

溶接ロボット(1)

保育士(1)

楽天市場(1)

経理(1)

医療(1)

文書作成(1)

発注書(1)

ショートカット(1)

WebAPI(1)

色操作(1)

スーパー開発ショートカット(1)

ライブラリ処理(1)

放課後等デイサービス(1)

児童福祉支援(1)

学校(1)

UI(1)

CAD(1)

カーソル操作(1)

FilterCellArea|セル範囲を柔軟条件で抽出(セル範囲 フィルター) | Excel VBA

更新日:1月4日

FilterCellArea|セル範囲を柔軟条件で抽出(セル範囲フィルター) | Excel VBA

<概要 (VBA セル範囲 フィルター)

 FilterCellAreaは、Excel VBAで指定したセル範囲に対してAutoFilterを実行し、文字列・数値・日付を柔軟な条件指定で抽出できる汎用プロシージャです(VBA セル範囲 フィルター)。


 セル範囲のフィルター処理は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代でフィルター」のコードは次のようになります。

 

 実行結果は次のようになります。

実行結果(「30代」でフィルター)
実行結果(「30代」でフィルター)

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


実行結果は次のようになります。

実行結果(「〇〇子」でフィルター)
実行結果(「〇〇子」でフィルター)

<関連記事>

今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。

コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。


<コード>



Excel VBAによる業務自動化・ツール開発をご検討の方へ

​"脱Excel"の前に、現状のExcelの潜在能力を120%発揮してみませんか?

Softex-Celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page