1. ホーム
  2. /
  3. [GAS]
  4. /
  5. GASで文字色を判定・取得!getFontColorObjectで条件分岐を自動化する方法

GASで文字色を判定・取得!getFontColorObjectで条件分岐を自動化する方法

GASで文字色を判定・取得!getFontColorObjectで条件分岐を自動化する方法

スプレッドシートでタスク管理をする際、「緊急の項目は赤文字にする」といったルールを使っている方は多いでしょう。しかし、その赤文字の項目を手作業でリストアップするのは面倒です。Google Apps Script (GAS) を使えば、「セルの文字色をトリガーにして、処理を自動化する」ことが可能です。

この記事では、GASで文字色を取得するための最新推奨メソッド getFontColorObject() を中心に、基本的な使い方から、色を条件に処理を分岐させる応用テクニックまで詳しく解説します。

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

文字色取得の新常識: getFontColorObject() を使おう

GASで文字色を取得するメソッドには旧と新の2つがあります。

  • getFontColor(): 旧式#ff0000 のような16進数の文字列を返す。
  • getFontColorObject(): 新・推奨。色情報を柔軟に扱える Color オブジェクトを返す。

getFontColorObject() が推奨される最大の理由は、テーマカラーに対応している点です。スプレッドシートのテーマで定義された色(例: “見出し1のテキスト色”)も正確に扱えるため、より汎用性の高いスクリプトが書けます。

Colorオブジェクトとは?

Colorオブジェクトは、色に関する様々な情報を取り出せる便利なオブジェクトです。

主要メソッド説明返り値の例
asHexString()色を16進数カラーコードの文字列で返す"#ff0000"
asRgbColor()RGB値を持つ RgbColor オブジェクトを返すRgbColor オブジェクト
getColorType()色の種類(RGBかテーマカラーか)を返すSpreadsheetApp.ColorType.RGB
asThemeColor()テーマカラーの種類を返すSpreadsheetApp.ThemeColorType.TEXT

asRgbColor() を経由すれば、getRed() getGreen() getBlue() でRGBの各成分値も取得できます。

GASで文字色を取得・活用する実践コード

1. 基本: 単一セルの文字色を取得する

B2セルの文字色を16進数とRGB値で取得する基本コードです。

function getSingleCellFontColor() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const targetCell = sheet.getRange("B2");
  
  // Colorオブジェクトを取得
  const colorObject = targetCell.getFontColorObject();
  
  // RgbColorオブジェクトに変換してから16進数文字列を取得
  const hexCode = colorObject.asRgbColor().asHexString();
  console.log("16進数コード:", hexCode);
  
  // RgbColorオブジェクトから各色成分を取得
  const rgbColor = colorObject.asRgbColor();
  console.log(`RGB値: R=${rgbColor.getRed()}, G=${rgbColor.getGreen()}, B=${rgbColor.getBlue()}`);
}

2. 高速化: 複数セルの文字色を一括取得する (getFontColorObjects)

forループでセルを一つずつ調べるより、getFontColorObjects() (複数形) で一括取得する方が圧倒的に高速です。

function getMultipleCellFontColors() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getRange("A1:C5");
  // Colorオブジェクトの二次元配列を取得
  const fontColorObjects = range.getFontColorObjects();
  
  fontColorObjects.forEach((row, rowIndex) => {
    row.forEach((colorObject, colIndex) => {
      const cellAddress = range.getCell(rowIndex + 1, colIndex + 1).getA1Notation();
      const hexCode = colorObject.asRgbColor().asHexString();
      console.log(`セル ${cellAddress} の色: ${hexCode}`);
    });
  });
}

応用テクニック: 文字色をトリガーに処理を自動化する

1. 「赤文字のセル」をリストアップする

シート内をスキャンし、文字色が赤 (#ff0000) のセルの値とアドレスを自動でリストアップします。

function listUpRedFontCells() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  const fontColors = range.getFontColorObjects();
  const values = range.getValues();
  const redFontCells = [];

  fontColors.forEach((row, rowIndex) => {
    row.forEach((color, colIndex) => {
      if (color.asRgbColor().asHexString() === "#ff0000") {
        const cellAddress = range.getCell(rowIndex + 1, colIndex + 1).getA1Notation();
        redFontCells.push({
          address: cellAddress,
          value: values[rowIndex][colIndex]
        });
      }
    });
  });

  console.log("赤文字のセル一覧:", redFontCells);
}

2. 文字色に応じて隣のセルにステータスを自動入力

A列の文字色を判定し、赤ならB列に「要対応」、青なら「完了」と自動で入力するスクリプトです。

function setStatusByFontColor() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const targetRange = sheet.getRange("A2:A" + sheet.getLastRow());
  const colors = targetRange.getFontColorObjects();

  colors.forEach((row, index) => {
    const colorHex = row[0].asRgbColor().asHexString();
    const statusCell = targetRange.offset(index, 1); // 隣のセル(B列)

    switch (colorHex) {
      case "#ff0000": // 赤色
        statusCell.setValue("要対応");
        break;
      case "#0000ff": // 青色
        statusCell.setValue("完了");
        break;
      default:
        statusCell.clearContent();
        break;
    }
  });
}

注意点: リッチテキストには使えない

このメソッドは、セル全体の文字色が均一である場合に有効です。セル内の一部の文字だけ色が違うリッチテキストの場合、セルの先頭文字の色が返されます。リッチテキストの各部分の色を取得するには、getRichTextValue() を使ったより複雑な処理が必要です。

まとめ

getFontColorObject() を使えば、これまで手作業で行っていた色に基づく判断をGASで自動化できます。

  • 推奨メソッドは getFontColorObject(): Colorオブジェクトで柔軟な色操作が可能。
  • 複数セルは getFontColorObjects() で一括取得: パフォーマンスが劇的に向上。
  • 色をトリガーに自動化: 特定の色のセルを抽出したり、ステータスを更新したりできる。

このテクニックをマスターして、あなたのスプレッドシート業務をさらにスマートに効率化しましょう。

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

関連記事

【GASスプレッドシート】getTextStyles()で複数セルの書式情報を効率的に一括取得・SEO最適化

【GASスプレッドシート】getTextStyles()で複数セルの書式情報を効率的に一括取得・SEO最適化

Google Apps Script (GAS) を用いてスプレッドシートを操作する際、特に大規模なデータや複数シートを扱う場合には、複数セルのフォント、色、太字、斜体などの「テキストスタイル(書式情報)」を効率的に管理することが、データの視覚的表現とレイアウトの整合性を保つ上で非常に重要になります。getTextStyles()メソッドは、このニーズに応える強力な一括取得機能を提供します。

本記事では、GASのRange.getTextStyles()メソッドを徹底解説します。複数セルのテキストスタイルを一括で取得する基本から、getTextStyle()との違い、TextStyleオブジェクトの詳細、さらにはシート全体や特定範囲のスタイル統一チェック、他のGoogleサービスとの連携、大規模データ処理におけるパフォーマンス最適化といった実践的な応用例まで、具体的なコードを交えて分かりやすく紹介します。

【GASスプレッドシート】getTextStyle()でセルの書式情報を効率的に取得・SEO最適化

【GASスプレッドシート】getTextStyle()でセルの書式情報を効率的に取得・SEO最適化

Google Apps Script (GAS) を用いてスプレッドシートを操作する際、**セルのフォント、色、太字、斜体などの「テキストスタイル(書式情報)」**をプログラムで正確に取得することは、データの視覚的表現を制御したり、条件に基づいた自動書式設定を行ったりする上で不可欠です。getTextStyle()メソッドは、このテキストスタイルを単一セルから取得するための基本的ながら強力な機能です。

本記事では、GASのRange.getTextStyle()メソッドを徹底解説します。単一セルのフォントや装飾の取得方法、リッチテキストの部分的なスタイル解析、条件付き書式によって適用されたスタイルの検出、さらには複数セルのスタイルを一括で効率的に取得できるgetTextStyles()、他のGoogleサービスとの連携、パフォーマンス最適化のヒントまで、具体的なコード例を交えて分かりやすく紹介します。