株式会社クイックのWebサービス開発blog

HAPPYなサービスプランナー・エンジニア・デザイナーのブログです。

【Googleスプレッドシート】GASでオリジナルのフィルタを作る方法

令和最初のブログ更新を担当します!sanamekoです!

突然ですが、職場内や仲間内でGoogleスプレッドシートを使っているときに、フィルタリテラシーで困ったこと、ありませんか??

フィルタリテラシー問題

Googleスプレッドシートでは、同時に複数人が閲覧・編集をすることができますが、迂闊にフィルターをかけると、ほかの人の表示画面にもフィルタがかかってしまいます。

そんなときのために、Googleスプレッドシートには「フィルタ表示」という便利な機能が用意されています。
ご存知の方も多いと思いますが、個人用フィルタを作成することで、ほかの人の表示に影響を与えずに済む・・・という優れものです。

但し、今までExcelをメインで使ってきた方に「これからはフィルタ表示機能を使ってね」と案内しても、なかなかこの機能を理解してくれなかったりします。
だいたい2パターンに分かれます。

  1. よく分からずやっぱり通常のフィルタを使うひと
    • フィルタを解除しないままシートを閉じる
    • 次に使うひとがちょっとイラッとしながらフィルターを解除する
  2. よく分からないけどフィルタ表示機能を使ってみるひと
    • ほかの人が設定したフィルタを無自覚に編集しちゃう
    • 個人用フィルタを設定したひとが発狂する

2のパターンが多いときは、被害が拡大する前に、フィルタ表示機能を使ってもらうのを早々に諦めたほうがいいかもしれません。
Googleスプレッドシートが浸透し、フィルタリテラシーが向上するまで待ちましょう。

フィルタ表示機能を使わない場合、通常のフィルタ機能を使ってもらうことになります。
そんなときに、次に使うひとのイライラを少しだけなくす(かもしれない)、GASでオリジナルフィルタを作る方法をご紹介します。

GASでオリジナルのフィルタを作る

具体的には、スプレッドシートに「フィルタ」というメニューを新しく追加し、特定の条件のフィルターを作成する、という方法です。
ほかの人が無造作にかけたフィルタをワンクリックで全て解除したりできます。

f:id:aimstogeek:20190508110425j:plain
こんな感じです

サンプルとして、お客様アンケートの回答をGoogleスプレッドシートにまとめたデータを準備しました。

f:id:aimstogeek:20190508110427j:plain
お客様アンケートの回答一覧

このスプレッドシートに、2つのフィルタ条件を作成します。

  • F列の満足度(満足/やや満足/普通/やや不満/不満)を、「不満」と「やや不満」のみに絞る。
  • 全フィルターを解除する

作り方

まず、メニューより、ツール > スクリプトエディタ を押下。
メニュー「フィルタ」を追加し、そのメニューに各条件を作成するスクリプトを記述します。

function onOpen() {
  var ui = SpreadsheetApp.getUi();          
  var menu = ui.createMenu('フィルタ');  // 追加したいメニュー名を記述
  menu.addItem('不満/やや不満のみ', 'onClickItem1');   // 追加したいアイテム名を記述
  menu.addItem('全フィルタ解除', 'onClickItem2');   // 追加したいアイテム名を記述
  menu.addToUi(); 
}

続いて、各アイテム(条件)をクリックしたときの動きを記述します。
※「○○のみに絞る」という条件は設定できないため、「不満/やや不満に絞る」ではなく「満足/やや満足/普通を除く」という設定をします。

/*F列から「満足/やや満足/普通」を除く)*/
function onClickItem1() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sh = ss.getActiveSheet(); 
  var criteria = SpreadsheetApp.newFilterCriteria()
    .setHiddenValues(['満足','やや満足','普通'])
    .build();
  sh.getFilter().setColumnFilterCriteria(6, criteria);
}

/*全ての列のフィルタを解除する*/
function onClickItem2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sh = ss.getActiveSheet(); 
  sh.getFilter().removeColumnFilterCriteria(2);  // B列のフィルタを解除
  sh.getFilter().removeColumnFilterCriteria(3);  // C列のフィルタを解除
  sh.getFilter().removeColumnFilterCriteria(4);  // D列のフィルタを解除
  sh.getFilter().removeColumnFilterCriteria(5);  // E列のフィルタを解除
  sh.getFilter().removeColumnFilterCriteria(6);  // F列のフィルタを解除
}

これで完了です。
スクリプトを保存してスプレッドシートを開きなおすと、メニューに「フィルタ」が追加されているので、アイテムをクリックして、動作を確認してみてください。

最後に

フィルタ全解除を設定しておけば、ぐちゃぐちゃとフィルタがかかっていてもワンクリックで解除できますし、
よく使う条件を設定しておけば、毎回複数列のフィルタをかける手間を省くことができます。

フィルタリテラシー問題の根本解決は難しいですが、この方法で少しでも快適なスプシライフになれば幸いです!


\\『明日のはたらくを創る』仲間を募集中です!! //
919.jp