Google Apps Script (GAS)で大量のセルの背景色を扱う際、パフォーマンスと機能性の両立は重要な課題です。getBackgroundObjects()は、この課題を解決するための最も強力なメソッドの一つです。
この記事では、getBackgroundObjects()の基本的な使い方から、他のメソッドとの違い、そして実践的な活用法までを詳しく解説します。

GASにおける背景色取得メソッドの使い分け
GASにはセルの背景色を取得するメソッドが4つあります。それぞれの特徴を理解し、状況に応じて最適なものを選択することが重要です。
| メソッド | 対象範囲 | 戻り値 | こんな時に最適 |
|---|---|---|---|
getBackground() | 単一セル | String | 1つのセルの色を16進数文字列で取得したい時。 |
getBackgrounds() | 複数セル | String[][] | 速度最優先。複数セルの色を16進数文字列で高速に一括取得したい時。 |
getBackgroundObject() | 単一セル | Color | 1つのセルの色をRGB値やテーマカラーなど詳細に分析したい時。 |
getBackgroundObjects() | 複数セル | Color[][] | 速度と機能性を両立。複数セルの色を詳細情報付きで高速に一括取得したい時。 |
getBackgroundObjects()は、getBackgrounds()の高速性とgetBackgroundObject()の機能性を兼ね備えた、最も汎用性の高いメソッドと言えます。
getBackgroundObjects()の基本的な使い方
getBackgroundObjects()は、指定した範囲の背景色をColorオブジェクトの二次元配列として返します。
function getColorsAsObjects() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange("A1:B2");
// Colorオブジェクトの二次元配列を取得
const colorObjects = range.getBackgroundObjects();
// 1行目・1列目のColorオブジェクトを取得
const colorA1 = colorObjects[0][0];
// Colorオブジェクトから色情報を取得
console.log(`色種別: ${colorA1.getColorType()}`); // RGB or THEME
if (colorA1.getColorType() === SpreadsheetApp.ColorType.RGB) {
console.log(`16進数: ${colorA1.asRgbColor().asHexString()}`);
}
}
Colorオブジェクトで何ができる?
Colorオブジェクトを使うと、単なる色だけでなく、その色がどのように設定されたかという文脈まで知ることができます。
- RGB値の個別取得:
asRgbColor().getRed()などで、色の三原色を数値として扱えます。 - テーマカラーの判定:
getColorType()で色がテーマカラーかどうかを判別し、asThemeColor().getThemeColorType()でどのテーマ(例:ACCENT1)かを取得できます。
実践例:シートのデザインルールをチェックする
getBackgroundObjects()は、スプレッドシートのデザインルールが守られているかを自動でチェックするようなスクリプトに最適です。
以下の例では、指定範囲内でテーマカラー以外(RGBで直接指定された色)が使われているセルを検出します。
function checkDesignRule() {
const range = SpreadsheetApp.getActiveRange();
const colorObjects = range.getBackgroundObjects();
colorObjects.forEach((row, i) => {
row.forEach((color, j) => {
// 色がテーマカラーでない場合
if (color.getColorType() !== SpreadsheetApp.ColorType.THEME) {
const cellAddress = sheet.getRange(i + 1, j + 1).getA1Notation();
console.log(`警告: セル ${cellAddress} はテーマカラー以外で着色されています。`);
}
});
});
}
パフォーマンスについて
getBackgrounds()とgetBackgroundObjects()は、どちらもAPI呼び出しを1回にまとめるバッチ処理なので非常に高速です。
10,000セルを処理した場合の参考値:
getBackgrounds(): 約 850msgetBackgroundObjects(): 約 920ms
Colorオブジェクトを生成する分、わずかにオーバーヘッドがありますが、その差は微々たるものです。色の詳細情報が必要な場合は、迷わずgetBackgroundObjects()を使いましょう。ループ内でgetBackground()を呼び出すのは絶対に避けるべきです。
まとめ
getBackgroundObjects()は、GASでセルの背景色を扱う上で、パフォーマンスと機能性を両立させるための鍵となるメソッドです。
- 高速なバッチ処理: 大量セルの色情報を一度のAPI呼び出しで取得。
- 詳細な色情報: RGB値やテーマカラーの種類など、高度な分析が可能。
- 幅広い応用: デザインルールのチェックから、色に基づいた複雑なデータ処理まで対応。
複数セルの色を扱う際は、getBackgroundObjects()を第一候補として検討することをお勧めします。



Learn best practices to improve the performance of your Apps Script projects.


ExcelからGoogle Spreadsheetに移行した。 これからは、GAS(Google Apps Script)による自動化をバリバリやってみようと思う。 ここでは、初めてのGASの作成の模様を、自分用メモとして書く。 2020-03-31追記 下の記事では、以...

Google Apps Scriptを使うとプログラムの中でGoogleスプレッドシートの色を変更することができます。 例えば毎日入力するツールで、危険な値になったセルを赤にしてめだたせたり、成績良好
