1. ホーム
  2. /
  3. [GAS]
  4. /
  5. 【GAS】getBackgroundObjects()で複数セルの背景色を高速・詳細に一括取得する方法

【GAS】getBackgroundObjects()で複数セルの背景色を高速・詳細に一括取得する方法

【GAS】getBackgroundObjects()で複数セルの背景色を高速・詳細に一括取得する方法

Google Apps Script (GAS)で大量のセルの背景色を扱う際、パフォーマンスと機能性の両立は重要な課題です。getBackgroundObjects()は、この課題を解決するための最も強力なメソッドの一つです。

この記事では、getBackgroundObjects()の基本的な使い方から、他のメソッドとの違い、そして実践的な活用法までを詳しく解説します。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索

GASにおける背景色取得メソッドの使い分け

GASにはセルの背景色を取得するメソッドが4つあります。それぞれの特徴を理解し、状況に応じて最適なものを選択することが重要です。

メソッド対象範囲戻り値こんな時に最適
getBackground()単一セルString1つのセルの色を16進数文字列で取得したい時。
getBackgrounds()複数セルString[][]速度最優先。複数セルの色を16進数文字列で高速に一括取得したい時。
getBackgroundObject()単一セルColor1つのセルの色を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(): 約 850ms
  • getBackgroundObjects(): 約 920ms

Colorオブジェクトを生成する分、わずかにオーバーヘッドがありますが、その差は微々たるものです。色の詳細情報が必要な場合は、迷わずgetBackgroundObjects()を使いましょう。ループ内でgetBackground()を呼び出すのは絶対に避けるべきです。

まとめ

getBackgroundObjects()は、GASでセルの背景色を扱う上で、パフォーマンスと機能性を両立させるための鍵となるメソッドです。

  • 高速なバッチ処理: 大量セルの色情報を一度のAPI呼び出しで取得。
  • 詳細な色情報: RGB値やテーマカラーの種類など、高度な分析が可能。
  • 幅広い応用: デザインルールのチェックから、色に基づいた複雑なデータ処理まで対応。

複数セルの色を扱う際は、getBackgroundObjects()を第一候補として検討することをお勧めします。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
Class Range | Apps Script | Google for Developers

Best Practices | Apps Script | Google for Developers

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

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
Spreadsheet Service | Apps Script | Google for Developers

はじめてのGAS - Qiita

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

【Google Apps Script入門】 プログラムの過程でセルの背景色を変える

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

セルの背景色を変更する | setBackground()【GAS】 – はじりつ

関連記事

【GAS】getBackgrounds()で複数セルの背景色を高速に一括取得する方法

【GAS】getBackgrounds()で複数セルの背景色を高速に一括取得する方法

Google Apps Script (GAS)でスプレッドシートの自動化を行う際、何千ものセルの背景色を扱う処理でパフォーマンスに悩んでいませんか? getBackgrounds()は、そんな悩みを解決する最も高速なメソッドです。

この記事では、getBackgrounds()の基本から、パフォーマンスを最大化する実践的な使い方までを詳しく解説します。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索

getBackgrounds()とは?

getBackgrounds()は、指定した範囲の全セルの背景色を、16進数カラーコードの二次元配列として一括で取得するメソッドです。

【GAS】getBackgroundObject()でセルの背景色をRGB値で詳細に操作する方法

【GAS】getBackgroundObject()でセルの背景色をRGB値で詳細に操作する方法

Google Apps Script (GAS)でセルの背景色を扱う際、#ffffffのような16進数文字列だけでなく、より詳細な色情報が必要になる場面があります。この記事では、getBackgroundObject()メソッドを使ってセルの背景色をColorオブジェクトとして取得し、RGB値の個別操作やパフォーマンスを最適化する高度なテクニックを解説します。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索

getBackgroundObject() とは? getBackground()との違い

getBackgroundObject()は、セルの背景色情報を、単なる文字列ではなく**Colorオブジェクト**として取得するメソッドです。