セル色カウントのソースコードの指定範囲をオートフィルしたい
初めまして、こちらで質問をさせて頂くにあたって知識不足ですが、お力添えを頂けると助かります。
■A~N列までのセル色を数えて、その個数によってO列以降に結果を表示させたい
セルのカウントについては、
https://teratail.com/questions/126740
を参考に、スクリプトエディタで独自関数(オリジナル関数?)を作成(コピペ)
【問題点】
求める答えは出てきたが、関数の参照範囲が各行にオートフィルできない
※進捗進行表の為、行ごとに結果がほしい__イタリックテキスト__
前任者からの引継ぎで既にセル色で管理されたスプレッドシート1800行以上ある表を(他シートともリンクしている為文言も変更できず…)
なるべくセル色を数えるという形で回答いただけると助かります
【計算結果イメージ】
__A__|__B__|__C__|__D__|~|O(指定色)|P(指定色のカウント)|
黄____|赤___|青____|黄____|~|黄____|2____|
赤____|赤___|緑____|赤____|~|黄____|0____|
緑____|黄___|青____|青____|~|青____|2____|
上記の色は、セル色です
O列の指定色は、基本的に黄色(#ffff00)ですが状況によって行ごとに色を変える為、各行のカウントが必須です
現在進行形で数時間ごとに、セル色が変動した際の進行状況をP列で判断したいです
.
.
.
発生している問題・エラーメッセージ
範囲指定の部分がオートフィルできない
該当のソースコード
【スクリプト】
// 指定範囲のセル背景色に合致するセルの合計数を返します
// color: 背景色 rangeSpecification: 範囲指定文字列
function countCellsWithBackgroundColor(color, rangeSpecification) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var range = sheet.getRange(rangeSpecification);
var x = 0;
var i = 0;
var j = 0;
var cell;
for (i = 1; i <= range.getNumRows(); i++) {
for (j = 1; j <= range.getNumColumns(); j++) {
cell = range.getCell(i, j);
if(cell.getBackgroundColor() == color)
x++;
}
}
return x;
}
// 指定セルの背景色を取得します。
function getBackgroundColor(rangeSpecification) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
return sheet.getRange(rangeSpecification).getBackgroundColor();
}
試したこと
他セルに、参照範囲を作って文字の式を連結して計算結果(例:4)をダイレクトにできる関数を探し中
※INDIRECT関数ではエラーになる為、連結した文字式の計算結果を表示する関数があったら教えて頂けると助かります。
=countCellsWithBackgroundColor(getBackgroundColor("O1"), "A1:N1")
※"O1"→指定セル色
※"A1:N1"→指定セル色のカウント範囲
【実際の数式】
試行錯誤の結果
■S列(数式にしないように1文字目は半角スペースを入れてます)
S1 =countCellsWithBackgroundColor(getBackgroundColor("O1"),
■T列(各行ごとにほしいので参照範囲をここで可変にしようとしています)
T1=" ""A"&row(A1)&":N"&row(A1)&""")"
【結果】 "A1:N1")
■U列(SとTを連結させてます)
U1=(RIGHT($S$1,LEN(S1)-1)&T1)
【結果】=countCellsWithBackgroundColor(getBackgroundColor("O1"), "A1:N1")
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。