エグウェブ.JP@福岡/WEBセミナー・分析・WEBサイト制作

福岡でWEB分析・ホームページ・WEBサイト作成・WordPress、Googleアナリティクス、LINEスタンプ、Photshop・illustrator、Excelの講座やセミナーを開催

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

time 2019/09/05

Google Apps Scriptを使ってスプレッドシート上にフィルタを解除>作成を自動化させて、業務効率化を図りましょう!

Googleスプレッドシートでフィルタの作成と解除は簡単

Googleスプレッドシートでフィルタの作成と解除をする方法は、簡単です。

例のごとく、サンプルデータ作成サービスさんのお力をお借りして。
サンプルデータ作成
疑似個人情報生成

「データ」>「フィルタを作成」

フィルタをかけます。

フィルタされました。

ここからさらに、フィルタを続けていくこともあるかと思います。

この場合に、「フィルタを解除したい」となった時に考えられるのは・・・

①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^)/

download

プロフィール

EGUWEB

EGUWEB

【皆さまの人生に最良のファーストステップを】WEBサイトを作りたい!WEB分析を学びたいけど分からない。とりあえず色々と知りたい!皆様の悩みを解決できるように頑張ります。 [詳細]

カテゴリー