今回は、Google Apps Scriptを使ってスプレッドシート上にフィルタを作成する方法や、フィルタをオフにする方法についてご紹介します。
フィルタを作成する
単一セルにフィルタを作成する
スプレッドシート上にフィルタを作成するには下記スクリプトを使用します。
createFilter()
下記のサンプル1は、アクティブシートのセルA1にフィルタを設定するためのスクリプトになります。
・サンプル1
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなスプレッドシートを取得 sh.getRange(1,1).createFilter(); } |

フィルタの作成1
セル範囲にフィルタを作成する
下記のサンプル2は、アクティブシートのセルA1~B5の表に対してフィルタを設定するためのスクリプトになります。
・サンプル2
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなスプレッドシートを取得 sh.getRange(1,1,5,2).createFilter(); } |

フィルタの作成2
フィルタをオフにする
スプレッドシート上に作成されているフィルタをオフにするには下記スクリプトを使用します。
getFilter().remove()
下記のサンプル3は、アクティブシートに作成されているフィルタをオフにするためのスクリプトになります。
・サンプル3
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなスプレッドシートを取得 sh.getFilter().remove(); } |
スプレッドシート上にフィルタがない状態でフィルタをオフにしようとするとエラーになる場合の対処法
スプレッドシート上にフィルタが存在しない状態で
getFilter().remove()
を使用すると、
TypeError: null のメソッド「remove」を呼び出せません。
というアラートがスクリプトエディタ上部に表示され、エラーが発生して処理を実行できませんので注意が必要です。
その場合、下記のサンプル4のように、
var filter = sh.getFilter();
でスプレッドシート上にフィルタがあるかどうかを取得し、
if( filter == null ){
で変数filterがnullの場合(フィルタがない場合)は何も処理しないよう、条件分岐で処理を分ける事でエラーを回避する事ができます。
・サンプル4
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなスプレッドシートを取得 var filter = sh.getFilter(); if( filter == null ){ } else { sh.getFilter().remove(); //フィルタをオフにする } |
フィルタのチェックを外す
下記のサンプル5では、
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues([‘テスト1′,’テスト3’])
.build();
で、フィルターで非表示にする(チェックを外す)項目を指定し、
sh.getFilter().setColumnFilterCriteria(1, criteria);
でフィルタの1列目の変数criteriaに代入した文字列「テスト1」と「チェック3」のチェックを外しています。
ちなみに、
setColumnFilterCriteria(1, criteria);
ですが、1番目の引数は列数になります。
・サンプル5
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなスプレッドシートを取得 var criteria = SpreadsheetApp.newFilterCriteria() sh.getFilter().setColumnFilterCriteria(1, criteria); } |

フィルタのチェックを外す
指定した列のフィルタを、全てチェックを入れた状態にする
指定した列のフィルタを、全てチェックを入れた状態にするには、下記のサンプル6のようなスクリプトになります。
sh.getFilter().removeColumnFilterCriteria(1);
で、アクティブシートに存在する1列目のフィルタを全て選択の状態にしています。
・サンプル6
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなスプレッドシートを取得 sh.getFilter().removeColumnFilterCriteria(1); } |