URLをコピーしました!
スキルアップを始める!

【GoogleAppsScript】フィルタを一気に解除してフィルタを再設定する便利なスクリプトを作る

GAS(GoogleAppsScript)
\ワードプレスのスキルアップはこちら!/ WordPress入門読本

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のスキルアップはこちら

Amazon.co.jp
Kindle Unlimited 会員は無料で購読できます
購読はこちら
Kindle Unlimited 会員は無料で購読できます
購読はこちら