GASでスプレッドシートの指定セルから文字のカラーコードを取得する方法

こんにちは!GoogleスプレッドシートをカスタマイズするのにGAS(Google Apps Script)を使ってる人、多いんじゃなかろうか?その中でも「セルの文字色を取得する方法」は、条件付き書式の拡張やデータ可視化にめちゃくちゃ便利なんだばい!

今回は、最新のGAS APIを踏まえながら、文字色取得の方法を基礎から応用までガッツリ解説していくけ!

スポンサーリンク

1. 文字色を取得する基本メソッド

GASでは、セルの文字色を取得するには主に2つのメソッドがあるっちゃね。

  • getFontColor()旧式(非推奨)
  • getFontColorObject()新推奨メソッド

従来はgetFontColor()を使ってHEXコード(例:#ff0000)を取得してたんじゃが、2023年以降のアップデートでgetFontColorObject()が推奨されるようになったんじゃ。理由は、より柔軟な色情報の取り扱いが可能になったけんね。

getFontColorObject()の特徴

このメソッドを使うと、色をColorオブジェクトとして取得できるんじゃ!

Colorオブジェクトの主なプロパティ

プロパティ説明
asHexString()HEXコード(#RRGGBB形式)
asRgbColor()RGB値(個別取得可)
asThemeColor()スプレッドシートのテーマカラー

このオブジェクトを使えば、色の個別成分(R, G, B)を取得できたり、色を分析するのが楽になるっちゃね!

2. 実際に文字色を取得してみる!

① 単一セルの文字色を取得

function getSingleCellColor() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const targetCell = sheet.getRange("B2");
  const colorObj = targetCell.getFontColorObject();
  
  console.log("HEXコード:", colorObj.asHexString());
  console.log("RGB値:", colorObj.asRgbColor().getRed() + "," +
              colorObj.asRgbColor().getGreen() + "," +
              colorObj.asRgbColor().getBlue());
}

これでセルB2の文字色がHEX形式とRGB形式で取得できるっちゃ!

② 複数セル範囲の文字色を一括取得

function getRangeColors() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
  const range = sheet.getRange("A1:C3");
  const colorMatrix = range.getFontColorObjects();
  
  colorMatrix.forEach((row, rowIndex) => {
    row.forEach((cellColor, colIndex) => {
      console.log(`セル ${String.fromCharCode(65 + colIndex)}${rowIndex + 1}:`,
                  cellColor.asHexString());
    });
  });
}

これでA1からC3の範囲にあるすべてのセルの文字色を取得できるばい!

3. 取得した色を活用する応用テクニック

① 条件付き書式を動的に適用する

function applyDynamicFormatting() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getRange("A2:A100");
  const colors = dataRange.getFontColorObjects();
  
  colors.forEach((colorObj, index) => {
    if (colorObj.asHexString() === "#ff0000") {
      const targetCell = dataRange.offset(index, 0, 1, 1);
      targetCell.setBackground("#fff2cc");
    }
  });
}

このコードを実行すると、文字色が赤(#ff0000)のセルだけ背景色を薄黄色(#fff2cc)に変更できるっちゃ!

② スプレッドシートの色使用状況を分析する

function analyzeColorUsage() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const fullRange = sheet.getDataRange();
  const colorData = fullRange.getFontColorObjects();
  const colorMap = new Map();

  colorData.flat().forEach(colorObj => {
    const hex = colorObj.asHexString();
    colorMap.set(hex, (colorMap.get(hex) || 0) + 1);
  });

  console.log("カラー使用状況:");
  colorMap.forEach((count, color) => {
    console.log(`${color}: ${count}セル`);
  });
}

このスクリプトを実行すると、スプレッドシート内で使われている色の種類とその使用頻度を取得できるっちゃ!

4. まとめ

  • getFontColor()は古い! getFontColorObject()を使うべし!
  • Colorオブジェクトの活用がカギ! HEX, RGB, テーマカラーまで取得可能!
  • 色の分析や条件付き書式の拡張に活用できる!

スプレッドシートのデータをもっと見やすく、使いやすくするために、ぜひこのテクニックを活用してみてばい!


コメント

タイトルとURLをコピーしました