2022/05/04に更新

【GASで便利に】フィルタ条件がセットされている列を確認する

スプレッドシート小技

どの列にフィルタ条件が設定されているのか教えてくれるGoogle Apps Scriptです。列が大量にあると、どこに条件がかかっているのか探すのが大変ですよね。

こんな悩みを解決します


  • フィルタ条件どこにかかってんだよこれ・・・目が死ぬ・・・探すの辛い・・・

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • フィルタ条件が設定されている探して、教えてくれます。
  • Z列より先(AA列)にも対応しています。

使い方


1.スクリプトの実行

ダミー個人情報をA列からAD列に書き込み、フィルタをセットしました。
F列と、見えていないですがAD列に条件がかかっています。

上のメニューにある「スクリプト実行」から「フィルタ条件が設定されている列を確認する」を実行します。

2.結果の確認

フィルタ条件が設定されている列が、ポップアップで表示されます。
F列とAD列が表示されたので、問題なく動作しているようです。

フィルタ自体設定されていない、もしくはフィルタ条件がかかっていない場合は「フィルタが有効な列はありません」というメッセージが表示されます。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00079/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('フィルタ条件が設定されている列を確認する', 'notify_filtered_column');

  // メニューを画面に追加する
  menu.addToUi();
}

function notify_filtered_column() {

  // メッセージを表示するためにUIオブジェクトを取得
  const ui = SpreadsheetApp.getUi();

  // 開いているスプレッドシートオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // 開いているシートオブジェクトを取得
  const sheet = ss.getActiveSheet();

  // シートにあるフィルターを取得
  const filter = sheet.getFilter();

  // シート内で使用されている列数を取得。列の数だけフィルタ条件を確認するので
  const cols = sheet.getLastColumn();

  // フィルタ条件がセットされている列を格納する配列
  const result = [];

  // 1列ずつ確認していく
  for (let i = 0; i < cols; i++) {

    try { // フィルタの設定範囲外に対してgetColumnFilterCriteria()を実行するとエラーになるためtry catchする

      // セットされているフィルタ条件を取得
      let criteria = filter.getColumnFilterCriteria(i + 1);

      // null以外であれば条件がセットされている
      if (criteria != null) {

        // フィルタされている列名(AやB、AA等)を取得する
        let filtered_col = sheet.getRange(1, i + 1, 1, 1).getA1Notation().match(/^([A-Z]+)[0-9]+/)[1];

        // 列名を結果用配列に追加する
        result.push(filtered_col);
      }

    } catch (e) {
      // getColumnFilterCriteria()に失敗したときはcontinueして次の列を見に行く
      continue;
    }

  }

  // フィルタ条件がセットされている列が1つ以上あれば画面に表示する
  if (result.length > 0) {

    ui.alert('以下の列でフィルタ条件が設定されています\n\n' + result.join('列\n') + '列');

  } else {

    ui.alert('フィルタが有効な列はありません');

  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp