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