【GAS & VBA】 フィルタで条件絞り込み【文字列】

ブログ(GAS & VBA)
特定のセル範囲にフィルタを設定し、文字列を条件にフィルタをかける

これをGAS(スプレッドシート)とVBA(Excel)で実行してみます。

【コード実行前】

 

【コード実行後】

コードを実行することにより、表の範囲にフィルタが設定され、品目の列(C列)が「キャベツ」の行のみが表示されます。

※画像はスプレッドシートですが、Excelでも共通です。

フィルタについては他の方法も掲載しておりますので、関連記事よりご覧ください。

GAS ースプレッドシートー

サンプルコード ーnewFilterCriteria/whenText…/setColumnFilterCriteriaー

function myFunction(){
  //アクティブなスプレッドシートを取得
  let ss = SpreadsheetApp.getActiveSpreadsheet();
 //フィルタを設定するシートを取得
  let sh = ss.getSheetByName("フィルタ");  //「フィルタ」シート

  //フィルタの条件設定 【キャベツと等しい】
  let rule = SpreadsheetApp.newFilterCriteria()
    .whenTextEqualTo("キャベツ")
    .build();
  //リスト範囲にフィルタを設定し、3列目が"キャベツ"の行のみを表示する
  sh.getRange("A1:F11").createFilter().setColumnFilterCriteria(3,rule);
}
≪手順≫
1.スプレッドシートを取得 【3行目】
2.シート名を指定して取得 【5行目】
3.フィルタの条件を設定する 【8~10行目】
4.指定したセル範囲にフィルタを設定し、指定した列に対してあらかじめ設定した条件で絞り込みをする【12行目】

先にフィルタ条件を設定(変数ruleにキャベツと等しいという条件を代入)した後で、特定のセル範囲にフィルタを設定し、フィルタ範囲の3列目(品目)に対してフィルタ条件(キャベツと等しい)で絞り込みをして表示するコード内容です。

newFilterCriteriaメソッド
SpreadsheetApp.newFilterCriteria().条件.build()
条件部分に絞り込み条件を記入することにより、スプレッドシート内にフィルタの条件を設定することができます。
条件部分に入れるメソッド一覧【条件が文字列の場合】
①whenTextEqualTo(“文字列”) : 文字列と等しい
今回はこちらを使用しています。”キャベツ”と等しいを条件としています。
②whenTextContains(“文字列”) : 文字列を含む
③whenTextDoesNotContain(“文字列”) : 文字列を含まない
④whenTextStartsWith(“文字列”) : 文字列で始まる
⑤whenTextEndsWith(“文字列”) : 文字列で終わる

createFilter + setColumnFilterCriteriaメソッド
Rangeオブジェクト.createFilter().setColumnFilterCriteria(列番号,フィルタ条件)
Rangeオブジェクトの範囲にフィルタを設定し、列番号(フィルタ内の左から何列目か)とフィルタ条件を指定してデータの絞り込みを行います。
サンプルコードでは列番号は3(左から3列目)、フィルタ条件はキャベツと等しい(変数ruleへ設定した条件)としています。

getRangeメソッド
Sheetオブジェクト.getRange(セル範囲)
指定したセル範囲を取得します。サンプルコードはA1からF11のセル範囲を取得しています。
詳細はこちらの記事をご覧ください

既にフィルタが設定されているシートで上記のコードを実行すると、エラーになります。

VBA ーExcelー

サンプルコード ーAutoFilterー

Sub サンプル()

  'シート名を取得
  Dim ws As Worksheet
  Set ws = Sheets("フィルタ")
  
  'データが入っている範囲にフィルタを設定し、3列目が"キャベツ"の行のみを表示する
  ws.Range("A1").AutoFilter 3, "キャベツ"
  
End Sub
≪手順≫
1.シート名を取得 【4、5行目】
2.表の範囲にフィルタを設定し、指定した列に対して条件を指定して絞り込みをする 【8行目】
※フィルタを設定するシートがアクティブの場合はシート名の取得(4、5行目)と8行目の
シート名変数(ws.)は省略可能です

特定のセル範囲を含むリストにフィルタを設定し、左から3列目(品目)がキャベツの行のみを表示するように絞り込みを行うコード内容です。

AutoFilterメソッド
Rangeオブジェクト.AutoFilter 列番号, 条件1, フィルタの種類, 条件2
Rangeオブジェクトを含むリスト範囲にフィルタを設定し、列番号(フィルタ内の左から何列目か)とフィルタ条件を指定してデータの絞り込みを行います。VBAの場合、Rangeオブジェクトは範囲全体をしていなくても、セル1つを選択すれば、つながっているリスト全体をフィルタ範囲として識別してくれます。サンプルコードの場合はA1セルのみを指定して、リスト全体に対してフィルタを設定しています。
※フィルタの種類, 条件2については、今回は条件が1つなので説明は省略します。

条件部分に入れるメソッド一覧【条件が文字列の場合】
①.AutoFilter 列番号, “文字列” : 文字列と等しい
今回はこちらを使用しています。”キャベツ”と等しいを条件としています。
②.AutoFilter 列番号, “<>文字列” : 文字列と等しくない
③.AutoFilter 列番号, “*文字列*”: 文字列を含む
④.AutoFilter 列番号, “<>*文字列*” : 文字列を含まない
⑤.AutoFilter 列番号, “文字列*” : 文字列で始まる
⑥.AutoFilter 列番号, “*
文字列” : 文字列で終わる

フィルタが設定されていないセルを指定して上記のコードを実行すると、以下のような結果になります。
①指定したセルの列にデータがある場合
そのセルを含むリスト範囲にフィルタが設定されます。
②指定したセルにデータがない場合
エラーになります。
タイトルとURLをコピーしました