セルの色コードを取得する関数が必要で、GAS(Google Apps Script)で作れないか試してみました。

結果としてそれっぽいものは作れたんですが、いろいろ無理なことがわかりました。
先に言っておきますが、ちょっとズルした関数です。

スプレッドシートのセル色を取得する関数

function checkBgc(targetCell) {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var bgColors = ss.getRange(targetCell).getBackgrounds();

return(bgColors);

}

上記コードを使うと、このように色コードが出力されます。

注意点

引数のところを見てお気づきの方もいるかもしれませんが、セルの位置を「文字列」で渡しています。

=checkBgc("A1")

理想を言えば、

=checkBgc(A1)

というように、セルの位置をそのまま渡したかったのですが、残念ながらそれは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形式でセルの位置情報を渡すことはできないので(セルの中身しか渡せないため)、こんなズルした形式しかできないのです。

一応メモとして残しておきましたが、誰かうまいことできる方法があったら教えてください。

おすすめの記事