今回は、GASを使ってスプレッドシートのフィルタ処理に挑戦しました。
残念ながら、私の知識不足のためGASの処理をする前にスプレッドシートに以下の設定をしました。その後にGASを実施しました。(「手順」の内容)
フィルタを設定。
フィルタの内容、何も選択しない。
手順
- フィルタを設定。
- フィルタを掛ける行について、以下を実施(何も選択しない)。
「値でフィルタ」ー「クリア」(フィルタチェックをすべて外す) - GASを実施 。
実行したGASの内容
- フィルタ未設定の一覧を取得。
- 上記より、表示するデータを除く。
- フィルタ更新
GAS
function filtera() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName("シート1");
var filter_set=['600031','600042']; //表示するデータ
var filter = sheet.getFilter(); //
// C列で表示しないデータ取得
var filter_hidden = filter.getColumnFilterCriteria(3).getHiddenValues();
//表示しないデータから表示するデータを除く
for(var j = 0; j < filter_set.length; j++){
for(var i = 0; i < filter_hidden.length; i++){
if( filter_hidden[i] == filter_set[j]){
filter_hidden[i] = "";
break;
}
}
}
var criteria = SpreadsheetApp.newFilterCriteria().setHiddenValues(filter_hidden).build();
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(3, criteria);
};
できることなら
- フィルタを設定
- フィルタに値を設定
としたかったのですが、「2.フィルタに値を設定」の仕方がわかりませんでした。
わかったのは、フィルタチェックが外れたデータの取得方法でした。
よって、フィルタチェックが外れたデータを取得し、このデータから、表示するデータを削除することにより、実現しました。