どの列にフィルタ条件が設定されているのか教えてくれるGoogle Apps Scriptです。列が大量にあると、どこに条件がかかっているのか探すのが大変ですよね。
特にありません。今お使いのスプレッドシートに組み込めます。
ダミー個人情報をA列からAD列に書き込み、フィルタをセットしました。
F列と、見えていないですがAD列に条件がかかっています。
上のメニューにある「スクリプト実行」から「フィルタ条件が設定されている列を確認する」を実行します。
フィルタ条件が設定されている列が、ポップアップで表示されます。
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('フィルタが有効な列はありません');
}
}