Google Apps Scriptを使ってスプレッドシート上にフィルタを解除>作成を自動化させて、業務効率化を図ってみたいと思います。
Googleスプレッドシートでフィルタの作成と解除は簡単
Googleスプレッドシートでフィルタの作成と解除をする方法は、簡単です。
例のごとく、サンプルデータ作成サービスさんのお力をお借りして。
サンプルデータ作成
疑似個人情報生成
「データ」>「フィルタを作成」
フィルタをかけます。
フィルタされました。
ここからさらに、フィルタを続けていくこともあるかと思います。
この場合に、「フィルタを解除したい」となった時に考えられるのは・・・
[rml_read_more]
①1列ずつ全選択する
列のフィルタをひとつずつ「すべて選択」して、全部の列を解除していきます。
列の数が多いと、なかなか面倒です。
②フィルタを削除して、フィルタを再構築する。
まずはフィルタをオフにします。
これで、フィルタを一気に解除できます。
これで、話は終わり・・・ではあるのですが。
この作業を繰り返す頻度が多い場合は、GoogleAppsScriptを使って自動化させた方が、圧倒的に便利です。
手作業で1回10秒の差があれば、100回で1,000秒の差が出ます。
スプレッドシート上にフィルタを作成するスクリプト
まずは、スプレッドシートを取得します。
getActiveSpreadsheet()
//アクティブなスプレッドシートを取得
var sSheet = SpreadsheetApp.getActiveSpreadsheet();
getActiveSheet()
//アクティブなスプレッドシートのアクティブシートを取得
var sheet = sSheet.getActiveSheet();
上記二つの変数を使って、現在のシートを取得します。これは毎回テンプレートとして使うおまじない、と考えておいて、大丈夫かと思います。
フィルタを作成するスクリプト
createFilter()を使います。
createFilter()
sheet .getRange(1,1).createFilter();
例えば、上記のようにすると、A1セル(getRangeで取得したセル)にフィルタを作ることができます。
試しにスクリプトを実行してみます。
例のごとく「承認が必要です」と表示されますので「許可を確認」を押します。
許可を与えるアカウントを選択します。
「このアプリは確認されていません」が表示されるので、詳細表示から安全ではないページに移動を選択します。
許可を押すとスクリプトが実行できるようになります。
ということでスクリプトを実行してみます。
フィルタが作成され・・・てますが、A1セルのみフィルタがかかっている状態になっています。
sheet .getRange(1,1).createFilter();
だと、「A1セルにフィルタをかける」という状態になるので、A1セルのみにフィルタがかかってしまいます。この場合は「1行目全体にフィルタをかける」という動作が必要です。
getRangeで表全体を取得
getRange(row, column, numRows, numColumns)
=getRange(開始行, 開始列, 何行を選択か, 何列を選択か)
このように、getLastRow()で最終行、getLastColumn()で最終列を取得します。
getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()
これで、A1から最終行・最終列までのセルを取得することができます。
つまり、
sheet .getRange(1,1,sheet.getLastRow(),sheet.getLastColumn() ).createFilter();
で「表全体を取得してフィルタをかける」ことができます。
getFilter().remove()
getFilter().remove()
シートのフィルタを解除します。
フィルタ解除関数を作成
つまり、これら一連の関数をまとめると、自動実行が作成できるということになります。
エラーが発生する場合は、色々な部分をチェックしてみましょう。
例えば、「.」の前に謎の半角スペースが入ってないか?末尾に違う記号を入れていないか?など。
怪しいところは全部潰してもダメであれば、「関数名」を疑います。
実行できました。
どうやら、関数名に日本語(漢字?)が入っていると「予期しないエラー」が発生するようです。英語に変えます。
プログラム実行
function MyRemoveFilter() {
// スプレッドシートを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
//アクティブなスプレッドシートを取得
var sheet = spreadsheet.getActiveSheet();
//フィルタを解除する
sheet.getFilter().remove();
// フィルタを再構築する
sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn() ).createFilter();
};
実行すると、エラーが発生しました。
TypeError: null のメソッド「remove」を呼び出せません。(行 7、ファイル「コード」)
これ、少し考えてみると「今の時点でフィルタされていない場合に、remove( )は実行できないのでは?」という気がします。
先にフィルタをかけてみて、再び実行。
やはり、そうでした。今度はエラーが発生することなく、処理が完了しています。
フィルタを作成するスクリプトまとめ
毎回、手作業で「フィルタ解除 > フィルタ」でもいいのですが、同じ動作を繰り返すようであれば、自動化させてしまいましょう!
実行すると、「フィルタ解除」>「フィルタ」という動作を実行します。
長くなりましたので、次回は、作ったスクリプトを動かすための設置方法を考えたいと思います。
それでは、また\(^o^)/
GASのスキルアップはこちら