セルの色コードを取得する関数が必要で、GAS(Google Apps Script)で作れないか試してみました。
結果としてそれっぽいものは作れたんですが、いろいろ無理なことがわかりました。
先に言っておきますが、ちょっとズルした関数です。
スプレッドシートのセル色を取得する関数
function checkBgc(targetCell) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var bgColors = ss.getRange(targetCell).getBackgrounds();
return(bgColors);
}
上記コードを使うと、このように色コードが出力されます。
注意点
引数のところを見てお気づきの方もいるかもしれませんが、セルの位置を「文字列」で渡しています。
理想を言えば、
というように、セルの位置をそのまま渡したかったのですが、残念ながらそれはGASではできない仕様になっています。
なぜかというと、関数でセルのA1指定のセルの位置を渡すと、結果的に「セルの値・配列」に変換されてしまうからです。
関数checkBgcを使った際に、引数(targetCell)に渡しているもの
function checkBgc(targetCell) {
こちらをコードをスプレッドシートで呼び出すと、引数tagetCellには以下のような値が入ります。
セル1個の場合
1次元配列の場合
2次元配列の場合
このように、セルの位置指定、範囲指定で関数に渡すと、結果としてセルの中身しか渡していません。
これは、GAS(Google Apps Script)の仕様としてそうなってしまっているため、どうしようもありません。
引数
組み込み関数と同様に、カスタム関数は入力値として引数を取ることができます。1つのセルへの参照を引数として関数を呼び出す場合(=DOUBLE(A1)のように)、引数はセルの値になります。
セルの範囲を参照して関数を呼び出した場合(=DOUBLE(A1:B10)など)、引数はセルの値の2次元配列になります。
例えば、以下のスクリーンショットでは、=DOUBLE(A1:B2)の引数は、Apps Scriptによってdouble([[1,3],[2,4]])と解釈されています。
セルの色取得にはセルの位置情報が必須
セルの色は、「セルそのもの」に設定されています。
そのため、色を判定したい場合は、セルの中身ではなく「セルの位置情報」を渡すことが必要です。
しかし、どうあがいてもA1形式でセルの位置情報を渡すことはできないので(セルの中身しか渡せないため)、こんなズルした形式しかできないのです。
一応メモとして残しておきましたが、誰かうまいことできる方法があったら教えてください。