Google Apps Script (GAS)で、「イタリック体(斜体)に設定されているセルを特定したい」といった、セルのフォントスタイルに基づいた自動化を行いたい場面があります。
その際に使用するのがgetFontStyle()メソッドですが、複数セルを扱う場合には大きな落とし穴があります。
この記事では、getFontStyle()とgetFontStyles()の正しい使い分け、リッチテキストを扱う際の注意点、そしてパフォーマンスを意識した実践的なコードを解説します。

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を開発できます。


