特定のセルの値を見て行を非表示させる
ソースコード
ソースコード
//行の値がFalseの場合、その行を非表示にするスクリプト
function rowhidden2(targetsheet){
//変数の宣言とセルのオフセット位置の設定
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var ss = sheet.getSheetByName(targetsheet);
var Cell = ss.getRange("V9");//offsetの参照点セルを設定
Cell.activate();
var rownum = 413; //シートの行の数
var rowcount = 0;
var tempcount = 0;
var aaa = "";
var startrow = "";
var aaaval = "";
//オフセット移動させつつ、判定しFalseの場合には、行をhide
while(rowcount < rownum){
//セルの値を取得する
aaa = Cell.offset(rowcount,0);
aaaval = aaa.getValue();
//真偽判定を行う
if(aaaval == true){
rowcount++
continue;
}
//行番号を取得する
startrow = aaa.getRow();
while(aaaval == false){
tempcount++;
rowcount++;
aaa = Cell.offset(rowcount,0);
aaaval = aaa.getValue();
}
//行を非表示にする
ss.hideRows(startrow,tempcount);
//初期化する
tempcount = 0;
}
}
コメント
コメント
- V列には、色々判定させた結果、TRUEかFALSEかを返すようにセルに計算式が含まれている。
- TRUEの場合は、そのまま表示させておく。FALSEの場合には、非表示対象とする。
- 複数行続いてFALSEが続くこともあり得るので、その場合に対処する(またスピードアップの為)為に、FALSEのセルにぶつかったら、FALSEのセルが続く限り、tempcountを回し、FALSEが始まったセルの行番号を控えて置く。
- 3.の結果、TRUEが来たら処理をやめて、hideRowsを使って行をまとめて非表示処理を実行する
- 最後にtempcountをクリアして、次のセルを読みに行く。
- 400行くらいのシートでTRUE行が1割~3割程度のもので、大体3秒~5秒くらいで処理できました。