にわかプログラマの備忘録

仕事の過程で調べたことを忘れないように記載しています

【GAS】すべてのセルで実行する

f:id:sorane0908:20210824140115p:plain
スプレッドシートの記載のある範囲のすべてのセルで関数を実行します。

function fun(){
  //アクティブなシートを選択
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
  let range = sheet.getDataRange();//記載のある範囲を選択
  let valuse = range.getValues();//範囲の値を取得

  for(let i = 0; i < valuse.length; i++){//縦のループ
    for(let a = 0; a < valuse[i].length; a++){//横のループ
      //行いたい処理
    }
  }

  range.setValues(valuse);//結果をシートに戻す
}

以下解説

「記載のある範囲」とは、A1からマウスでドラッグしたときのような選択になるので、間にからのセルがあるとからのセルでも実行されます。

getDataRange()getValues()を使用しているので、値は2次元配列で取得されているのでループを2重にすることで個別の値が取得できます。

取得した値を全部5倍にすると以下のようになります。

for(let i = 0; i < valuse.length; i++){//縦のループ
  for(let a = 0; a < valuse[i].length; a++){//横のループ
    valuse[i][a] = valuse[i][a] * 5;//valuse[i][a]を5倍してvaluse[i][a] に戻す
  }
}

空のセルを処理から外したい場合

for(let i = 0; i < valuse.length; i++){//縦のループ
  for(let a = 0; a < valuse[i].length; a++){//横のループ
    if(valuse[i][a] != ""){//valuse[i][a]が空でなければ実行する
      //行いたい処理
    }
  }
}

横のループを行わずaの値を固定することで、特定の列だけに処理を行うこともできます。