【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
こんにちは。IMMRです。ここでは、オートフィルターの複数条件の設定について説明をします。
「オートフィルター」に関しては、以前にも説明しています。 ※ただし、ここで説明しているのは、条件が1つの場合です。
また、これから説明するのは上記のリンク先(オートフィルターの設定・絞り込み・削除)とは、異なる記載方法です。
オートフィルターの複数条件の設定について説明をしていきます。
記載方法は、下記2つがありますので、双方を説明します。
・条件を直接記載して、オートフィルターの設定(直接記載)
・条件を配列に格納して、配列よりオートフィルターの設定(配列記載)
まずは、(直接記載)です。
直接記載の設定は下記のように何列目のセルが、どんな条件なのかを記載していきます。
オートフィルターの宣言および条件
セル.AutoFilter,Field,Criteria1,Operator,Criteria2
詳細は以下の通りです。
Field:列の位置
Criteria1:1つ目の条件
Operator:ANDやOR等の方法
Criteria2:2つ目の条件
この記載によって、条件によるオートフィルターをかけることが出来ますが
オートフィルターの設定では、条件を3つ、4つ必要ということもでてくると思います。
条件を追加したい場合は
AutoFilter,Field,Criteria1,Operator,Criteria2,Operator,Criteria3,・・・
と追加して記載するのではなく、下記のように配列を使用して記載していきます。
ここでは配列を使用して、オートフィルターを設定していきます。
順序としては
配列を作成して、オートフィルターの設定条件を追加してから
条件を追加した配列よりオートフィルターを設定するといった感じです。
配列の宣言および条件の設定
Dim Target(3) As String
Target(0) = 条件1
Target(1) = 条件2
Target(2) = 条件3
オートフィルターの宣言および配列
セル.AutoFilter,Field,
Target, xlFilterValues
Field:列の位置
Target:オートフィルターを設定する時に使用する配列名
xlFilterValues:オートフィルターを設定する時に必要
この記載方法で配列に入れた複数の条件でオートフィルターを設定することができます。
では、サンプルプログラムを見て、使用例を見ていきたいと思います。
入力データは下記の表を使用してオートフィルターの絞り込みを行っていきます。
図1 セミナー参加者表
図1 セミナー参加者表の
B列(左から2列目)の参加者で、”鈴木”、”佐藤” どちらかの場合でオートフィルターで絞り込みたい場合は以下のように記載します。
サンプルプログラム①
Sub test1()
Range("A3").AutoFilter 2, "鈴木", xlOr, "佐藤"
End Sub
B列(左から2列目)なのでFieldの値は2となります
”鈴木”か”佐藤”かという判別を行うのでxlOrが使われます
図1 セミナー参加者表の
B列(左から2列目)の参加者で、”鈴木”、”佐藤”、”伊藤” いずれかをオートフィルターで絞り込みたい場合のサンプルコードです。
サンプルプログラム②
Sub test2()
Dim Target(3) As String
Target(0) = "鈴木"
Target(1) = "佐藤"
Target(2) = "伊藤"
Range("A3").AutoFilter 2, Target, xlFilterValues
End Sub
B列(左から2列目)なのでFieldの値は2
Targetという名の配列を作成して、
その中に条件(”鈴木”、”佐藤”、”伊藤”)部分を入れていきます。
図1 セミナー参加者表の
C列(左から3列目)のテスト点数で、値が70以上 80より小さい値をオートフィルターで絞り込みたい場合のサンプルコードです。
今回は値に一致するかではなく、数値による以上未満の条件判定を行います。
サンプルプログラム③
Sub test3()
Range("A3").AutoFilter 3, ">=70", xlAnd, "<80"
End Sub
※B列(左から3列目)なのでFieldの値は3です。
条件式を記載する場合は、>=70ではなく”>=70”と””で囲んで設定します。
上記にあげた3つのサンプルプログラムを実行して、いきます。
図2 test1_実行前
ここでは、対象を見やすくするために、事前に参加者が「鈴木」「佐藤」の行には塗りつぶしをおこなっています。
↓
↓実行します。
↓
図3 test1_実行後
予定どおり、参加者が「鈴木」「佐藤」で絞り込みが出来ています。
図4 test2_実行前
ここでは、対象を見やすくするために、事前に参加者が「鈴木」「佐藤」「伊藤」の行には塗りつぶしをおこなっています。
↓
↓実行します。
↓
図5 test2_実行後
予定どおり、参加者が「鈴木」「佐藤」「伊藤」で絞り込みが出来ています。
図6 test3_実行前
ここでは、対象を見やすくするために、事前に点数が70以上、80より小さいの値の行には塗りつぶしをおこなっています。
↓
↓実行します。
↓
図7 test3_実行後
予定どおり、点数が70以上、80より小さいの値で絞り込みが出来ています。
以上により、3つのサンプルプログラムを実行して、正しく出力できることを確認しました。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート