1. ホーム
  2. /
  3. [GAS]
  4. /
  5. 【GAS】getFontWeightで太字(bold)を判定!複数セルはgetFontWeightsで高速化

【GAS】getFontWeightで太字(bold)を判定!複数セルはgetFontWeightsで高速化

【GAS】getFontWeightで太字(bold)を判定!複数セルはgetFontWeightsで高速化

Google Apps Script (GAS)で、「太字(Bold)になっているセルだけを抜き出して処理したい」「ヘッダー行がすべて太字になっているかチェックしたい」といった、フォントの太さに基づく自動化ニーズは非常に多いです。

その際に使用するのがgetFontWeight()メソッドですが、複数セルを扱う際には注意しないと、意図通りに動作しないだけでなく、スクリプトのパフォーマンスを著しく低下させる原因にもなります。

この記事では、getFontWeight()getFontWeights()の正しい使い分けと、パフォーマンスを最大化する実践的なコーディング手法を解説します。

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

getFontWeight()の基本と複数範囲の罠

getFontWeight()は、指定したセルのフォントの太さを文字列で返すメソッドです。

戻り値は以下の2種類です。

  • 'bold': 太字
  • 'normal': 標準

しかし、このメソッドを複数セルの範囲に対して使用すると、範囲の左上隅のセルの値しか返しません。 これはGAS初心者が陥りがちな罠の一つです。

// A1は "bold", B1は "normal" だとする
const range = SpreadsheetApp.getActiveSheet().getRange("A1:B1");
// A1の値である "bold" しか返ってこない
const weight = range.getFontWeight(); 
console.log(weight); // "bold"

解決策: getFontWeights()による高速一括取得

複数セルのフォントの太さを正しく、かつ高速に取得するには、必ず**getFontWeights()**(複数形)を使用します。

このメソッドは、範囲全体のフォントウェイト情報を二次元配列 (String[][]) として、たった1回のAPI呼び出しで取得します。ループでgetFontWeight()を呼び出すよりも劇的に高速です。

function fetchAllFontWeights() {
  const range = SpreadsheetApp.getActiveSheet().getRange("A1:B2");
  const weights = range.getFontWeights();
  
  console.log(weights); // 例: [["bold", "normal"], ["bold", "normal"]]
}

実践!読み書き両方の一括処理テクニック

GASの高速化の真髄は、読み込みだけでなく、書き込みも一括で行うことにあります。

シナリオ1:太字のセルを効率的にハイライトする

シート内のすべての太字セルをハイライトするスクリプトです。ループ内でsetBackground()を呼び出すのではなく、配列上で処理を完結させ、最後に一度だけシートに書き込むのがポイントです。

/**
 * データ範囲内の太字のセルを黄色でハイライトする
 */
function highlightBoldCells() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  
  // フォントウェイトと背景色をそれぞれ一括取得
  const weights = range.getFontWeights();
  const backgrounds = range.getBackgrounds();
  
  let isChanged = false;

  weights.forEach((row, r) => {
    row.forEach((weight, c) => {
      // 太字で、まだ色が設定されていないセルを対象
      if (weight === 'bold' && backgrounds[r][c] !== '#ffff00') {
        backgrounds[r][c] = '#ffff00'; // 配列上で背景色を変更
        isChanged = true;
      }
    });
  });

  // 変更があった場合のみ、一括で書き込む
  if (isChanged) {
    range.setBackgrounds(backgrounds);
  }
}

シナリオ2:ヘッダー行の書式を自動で統一する

表の1行目がヘッダーであると仮定し、すべてが太字でない場合に自動で太字に修正するスクリプトです。

function unifyHeaderFormat() {
  const sheet = SpreadsheetApp.getActiveSheet();
  if (sheet.getLastRow() === 0) return; // シートが空の場合は何もしない

  const headerRange = sheet.getRange(1, 1, 1, sheet.getLastColumn());
  
  const weights = headerRange.getFontWeights()[0]; // 1行だけの二次元配列なので[0]で一次元化
  
  let needsCorrection = false;
  
  // 元の配列を元に、新しい設定値の配列を作成
  const newWeights = weights.map(weight => {
    if (weight !== 'bold') {
      needsCorrection = true;
      return 'bold';
    }
    return 'bold'; // 既存のboldもそのままboldに
  });

  // 修正が必要な場合のみ、一括で書き込む
  if (needsCorrection) {
    // setFontWeightsに渡すために、再度二次元配列に戻す
    headerRange.setFontWeights([newWeights]); 
    SpreadsheetApp.getUi().alert('ヘッダー行を太字に統一しました。');
  }
}

まとめ

フォントの太さを扱う際は、以下の原則を徹底しましょう。

  • 単一セルの場合のみ getFontWeight() を使う。
  • 複数セルの場合は、パフォーマンスのために必ず getFontWeights() で一括取得する。
  • 書式を変更する際も、setBackgrounds()setFontWeights() を使い、読み書き両方の一括処理を心がける。

この原則を守ることで、大量のデータを扱っても安定して高速に動作する、信頼性の高いGASを開発できます。

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

Class Range | Apps Script | Google for Developers

関連記事

【GAS高速化】getFontWeights()で太字を一括取得!API呼び出しを激減させる方法

【GAS高速化】getFontWeights()で太字を一括取得!API呼び出しを激減させる方法

Google Apps Script (GAS)で、スプレッドシートの大量のセルの中から「太字(bold)のセル」を探す処理を書いたとき、実行に時間がかかりすぎて困った経験はありませんか?その原因は、十中八九、ループの中でgetFontWeight()(単数形)を呼び出していることにあります。

この記事では、パフォーマンスを劇的に改善するための必須メソッド**getFontWeights()**に焦点を当て、その効果的な使い方と、取得した書式情報を他のデータと組み合わせて活用する、より高度なテクニックを解説します。

【GASスプレッドシート】getValues()で複数セルデータを高速一括取得・SEO最適化

【GASスプレッドシート】getValues()で複数セルデータを高速一括取得・SEO最適化

Google Apps Script (GAS) を用いてスプレッドシートのデータを操作する際、複数セルの値(データ)を効率的かつ高速に取得することは、自動化スクリプトのパフォーマンスと信頼性を決定づける最も重要な要素の一つです。getValues()メソッドは、このニーズに応えるための基本的ながら極めて強力な機能です。

本記事では、GASのRange.getValues()メソッドを徹底解説します。複数セルのデータを二次元配列として一括取得する基本から、getValue()getDisplayValues()との明確な違い、各データ型(数値、文字列、日付、真偽値)の挙動、さらには大規模データ処理のためのパフォーマンス最適化(チャンク処理)、そしてよくある「ハマりどころ」と対策まで、具体的なコード例を交えて分かりやすく紹介します。