Google Apps Script (GAS)でスプレッドシートの自動化を行う際、何千ものセルの背景色を扱う処理でパフォーマンスに悩んでいませんか? getBackgrounds()は、そんな悩みを解決する最も高速なメソッドです。
この記事では、getBackgrounds()の基本から、パフォーマンスを最大化する実践的な使い方までを詳しく解説します。

getBackgrounds()とは?
getBackgrounds()は、指定した範囲の全セルの背景色を、16進数カラーコードの二次元配列として一括で取得するメソッドです。
function basicUsage() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange("A1:C2");
// カラーコードの二次元配列を取得
const colors = range.getBackgrounds();
console.log(colors);
// 出力例:
// [['#ff0000', '#00ff00', '#0000ff'], // 1行目の色 (A1, B1, C1)
// ['#ffffff', '#ffff00', '#00ffff']] // 2行目の色 (A2, B2, C2)
}
API呼び出しを一度にまとめるため、ループ処理で1セルずつgetBackground()を呼び出すよりも劇的に高速です。
getBackgrounds() vs getBackgroundObjects()
getBackgrounds()は速度に特化している一方、getBackgroundObjects()はColorオブジェクトを返すため機能性に優れます。
| メソッド | 戻り値 | こんな時に最適 |
|---|---|---|
getBackgrounds() | String[][] | とにかく速さを求める時。16進数文字列での比較で十分な場合に最適。 |
getBackgroundObjects() | Color[][] | RGB値やテーマカラーなど、色の詳細情報が必要な時。 |
単純な色の比較であれば、getBackgrounds()が最も効率的です。
実践例1:特定の色を持つセルを検索する
getBackgrounds()は、getValues()と組み合わせることで、「特定の色を持つセルの値をリストアップする」といった処理を高速に実行できます。
function findCellsByColor() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getDataRange(); // シート全体のデータ範囲
// ① 値と背景色をそれぞれ一括取得
const values = range.getValues();
const backgrounds = range.getBackgrounds();
const targetColor = "#fff2cc"; // 検索したい色(薄い黄色)
const results = [];
// ② メモリ上でループ処理
for (let i = 0; i < backgrounds.length; i++) {
for (let j = 0; j < backgrounds[i].length; j++) {
if (backgrounds[i][j] === targetColor) {
results.push(values[i][j]);
}
}
}
console.log(results); // ['タスクA', '重要事項B'] のように出力
}
この**「一括取得 → メモリ上で処理」**のパターンが、GASのパフォーマンスチューニングの基本です。
実践例2:色情報を基に一括でセルを更新する
getBackgrounds()で取得した色情報を加工し、setBackgrounds()で一括更新する例です。「白色のセルだけを薄いグレーに塗り替える」といった一括置換処理を高速に行えます。
function replaceWhiteToGray() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getDataRange();
// ① 背景色を一括取得
const originalColors = range.getBackgrounds();
// ② メモリ上で新しい色の二次元配列を作成
const newColors = originalColors.map(row => {
return row.map(color => {
// 白色(#ffffff)なら薄いグレー(#f3f3f3)に置換
return (color === "#ffffff") ? "#f3f3f3" : color;
});
});
// ③ 背景色を一括更新
range.setBackgrounds(newColors);
}
この方法なら、何千セルあっても数秒で処理が完了します。
まとめ
getBackgrounds()は、GASで複数セルの背景色を扱う上で、パフォーマンスを最優先する場合に最適なメソッドです。
- 最速: 16進数カラーコードの二次元配列を返すため、オーバーヘッドが最も少ない。
- バッチ処理の要:
getValues()やsetBackgrounds()と組み合わせることで、大量のデータを効率的に処理できる。 - シンプル: 戻り値が単純な文字列配列なため、扱いやすい。
色の詳細情報が不要な場合は、getBackgrounds()を積極的に活用し、高速で快適なスクリプトを目指しましょう。



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




GAS開発者向けにスプレッドシートの背景色機能をすべてまとめました。重要なセルの背景色を変えればデータが際立ちますね。データを目立たせたい場合はフォント色の変更よりも効果的だと思います。RGB設定(赤・緑・青)や現在の色の取得などです。交互
getBackgrounds() セル範囲の背景色をセルごとに取得する。 サンプルコード // 現在アクティブなスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); // そのスプレッドシートにある最初のシートを取得 var sheet = ss.getSheets()[0]; // そのシートにある B5:C6 のセル範囲を取得 var range = sheet.getRange(“B5:C6”); // そのセル範囲に設定されている背景色をセルごとに取得 var bgColors = range.getBackgrounds(); // そのセル範囲の行数だけ処理 for (var i in bgColors) { // そのセル範囲の列数だけ処理 for (var j in bgColors[i]) { // そのセルに設定されているセルの背景色を取得しログに出力 Logger.log(bgColors[i][j]); } } var ss = SpreadsheetApp.getActiveSpreadsheet(); // […]

Google Apps Script (GAS) でこのセル範囲のセルの背景色をRGBやColorクラスで取得・設定する