特定のセルの値を見て行を非表示させる

ソースコード

//行の値が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;
  }
}

コメント

  1. V列には、色々判定させた結果、TRUEかFALSEかを返すようにセルに計算式が含まれている。
  2. TRUEの場合は、そのまま表示させておく。FALSEの場合には、非表示対象とする。
  3. 複数行続いてFALSEが続くこともあり得るので、その場合に対処する(またスピードアップの為)為に、FALSEのセルにぶつかったら、FALSEのセルが続く限り、tempcountを回し、FALSEが始まったセルの行番号を控えて置く。
  4. 3.の結果、TRUEが来たら処理をやめて、hideRowsを使って行をまとめて非表示処理を実行する
  5. 最後にtempcountをクリアして、次のセルを読みに行く。
  6. 400行くらいのシートでTRUE行が1割~3割程度のもので、大体3秒~5秒くらいで処理できました。