1. ホーム
  2. /
  3. [GAS]
  4. /
  5. 【GAS】getFontStyleでイタリック体を判定!複数セルはgetFontStylesで高速化

【GAS】getFontStyleでイタリック体を判定!複数セルはgetFontStylesで高速化

【GAS】getFontStyleでイタリック体を判定!複数セルはgetFontStylesで高速化

Google Apps Script (GAS)で、「イタリック体(斜体)に設定されているセルを特定したい」といった、セルのフォントスタイルに基づいた自動化を行いたい場面があります。

その際に使用するのがgetFontStyle()メソッドですが、複数セルを扱う場合には大きな落とし穴があります。

この記事では、getFontStyle()getFontStyles()の正しい使い分け、リッチテキストを扱う際の注意点、そしてパフォーマンスを意識した実践的なコードを解説します。

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

getFontStyle()の基本と「左上セル」の罠

getFontStyle()は、指定したセルのフォントスタイルを文字列で返すメソッドです。

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

  • 'normal': 標準のスタイル
  • 'italic': イタリック体
  • 'oblique': 傾斜体(スプレッドシート上では通常italicと区別されません)

ただし、getFontSize()などと同様に、複数セルの範囲に対して使用すると左上隅のセルの値しか返さないという重要な注意点があります。

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

複数セルはgetFontStyles()で高速一括取得

複数セルのフォントスタイルを正しく、かつ高速に取得するには、必ず**getFontStyles()**(複数形)を使いましょう。

このメソッドは、範囲全体のスタイル情報を二次元配列 (String[][]) として、たった1回のAPI呼び出しで取得します。これにより、ループでgetFontStyle()を呼び出すよりも劇的にパフォーマンスが向上します。

function fetchAllFontStyles() {
  const range = SpreadsheetApp.getActiveSheet().getRange("A1:B2");
  const styles = range.getFontStyles();
  
  console.log(styles); // 例: [["normal", "italic"], ["normal", "normal"]]
}

注意点:リッチテキストの扱いは?

セル内の一部の文字だけスタイルが異なる「リッチテキスト」の場合、getFontStyle()getFontStyles()セルの先頭文字のスタイルを返します

例えば、セルに「通常イタリック」と入力されている場合、これらのメソッドが返す値は先頭の “通” に適用されている 'normal' となります。セル内の複雑な書式を正確に取得したい場合は、getRichTextValue() を使う必要があります。

実践的コード例:イタリック体のセルを効率的にハイライト

getFontStyles() を使って、シート内のすべてのイタリック体のセルをハイライトするスクリプトです。読み込みと書き込みの両方を一括処理で行うのがパフォーマンス上の鍵です。

/**
 * データ範囲内のイタリック体のセルを薄い黄色でハイライトする
 */
function highlightItalicCells() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  
  // スタイルと背景色をそれぞれ一括取得
  const styles = range.getFontStyles();
  const backgrounds = range.getBackgrounds();
  
  let isChanged = false;

  styles.forEach((row, r) => {
    row.forEach((style, c) => {
      // イタリック体で、まだ色が設定されていないセルを対象
      if (style === 'italic' && backgrounds[r][c] !== '#fff2cc') {
        backgrounds[r][c] = '#fff2cc'; // 背景を薄い黄色に変更
        isChanged = true;
      }
    });
  });

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

このコードでは、ループ内でsetBackground()を呼び出すのではなく、まずbackgrounds配列上で変更を行い、最後にsetBackgrounds()で一度にシートに書き込んでいます。これがGASにおける高速化のセオリーです。

まとめ

フォントスタイルを扱う際は、以下の点を押さえておきましょう。

  • 単一セルの場合のみ getFontStyle() を使う。
  • 複数セルの場合は、パフォーマンスのために必ず getFontStyles() で一括取得する。
  • リッチテキストの場合、先頭文字のスタイルしか取得できない点に注意する。
  • 書式を変更する際も、setBackgrounds() のように一括書き込み用のメソッドを使い、読み書き両方の一括処理を心がける。

これらの原則を守ることで、安定して高速に動作するGASを開発できます。

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

Class Range | Apps Script | Google for Developers

関連記事

【GAS高速化】getFontStyles()でフォントスタイルを一括取得!API呼び出しを激減させる方法

【GAS高速化】getFontStyles()でフォントスタイルを一括取得!API呼び出しを激減させる方法

Google Apps Script (GAS) で、スプレッドシート内の大量のセルのフォントスタイル(イタリック体など)をチェックする際に、スクリプトの実行が遅いと感じたことはありませんか?その原因は、ほぼ間違いなくAPIの呼び出し回数にあります。

getFontStyle()(単数形)をループ処理で使うのは、パフォーマンスを著しく低下させるアンチパターンです。

この記事では、スクリプトを劇的に高速化するための必須メソッド**getFontStyles()**に焦点を当て、その効果的な使い方と、取得した二次元配列を活用する実践的なテクニックを解説します。

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

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

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

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