0
0

More than 1 year has passed since last update.

Google App Scriptでセルの背景色が連続する時の開始セル、終了セルを取得するってみんなに言ってたっけ?

Posted at

経緯

サウザンドサニー号の船員の出勤シフト管理をするときにスプレッドシート上のクルーのセルがどこからどのセルまでなのかを知りたいので作りました。
目視で確認すれば、5列目から14列目と言うことは分かるのですが、コード内でベタ打ちする箇所をなるべく減らすために関数にしてみました。

スクリーンショット 2022-04-11 17.25.35.png

この関数を使用することで期待する戻り値は5列目、14列目という数値になります。

Google App Script

function colorEndClmJudge(cellBgColor, shName){
  // 最終的にリターンする時に使用するオブジェクト
  let answer = {
    startClm : 0,
    endClm   : 0
  };
//  特定の背景色の開始カラムのセルを判定をするフラグ
  let startFlg = false;
  // 特定の背景色の終了カラムのセルを判定をするフラグ
  let endFlg = false;
  // while文を処理するための変数
  let cnt = 1;

  // お決まりのオブジェクト取得。シート名は関数に引数2で取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName(shName);

  // 開始フラグと終了フラグがfalseの間処理継続
  while((startFlg == false) || (endFlg == false)){
    // セルの背景色を取得
    let bgColor = sh.getRange(1,cnt).getBackground();

    // 初めてスタッフのセルに来たとき
    // startFlg == falseとしないと処理が続くので必要
    if(bgColor == cellBgColor && startFlg == false){
      answer.startClm = cnt;
      startFlg = true;
    }
    // セルの背景色が変わったタイミング(終了セル)を判定
    if(startFlg == true && answer.startClm > 1 && bgColor !== cellBgColor){
      answer.endClm = cnt - 1;
      endFlg = true;
    }

    cnt++;
  }

  // オブジェクトで返す
  return answer;
}
実行メインコード
  const clueBgColor = "#00ffff";
  const shName = "海賊王";
    let bgColorClms = colorEndClmJudge(clueBgColor,shName);
   
  console.log(bgColorClms);

  // bgColorClms = {
  //    startClm : 5,
  //    endClm   : 14
  // };
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0