Google Apps Script (GAS) を用いてスプレッドシートを操作する際、特に大規模なデータや複数シートを扱う場合には、複数セルのフォント、色、太字、斜体などの「テキストスタイル(書式情報)」を効率的に管理することが、データの視覚的表現とレイアウトの整合性を保つ上で非常に重要になります。getTextStyles()メソッドは、このニーズに応える強力な一括取得機能を提供します。
本記事では、GASのRange.getTextStyles()メソッドを徹底解説します。複数セルのテキストスタイルを一括で取得する基本から、getTextStyle()との違い、TextStyleオブジェクトの詳細、さらにはシート全体や特定範囲のスタイル統一チェック、他のGoogleサービスとの連携、大規模データ処理におけるパフォーマンス最適化といった実践的な応用例まで、具体的なコードを交えて分かりやすく紹介します。
GAS初心者から、スプレッドシートの視覚的表現と自動化の効率をさらに高めたい上級者まで、すべての方に役立つ情報が満載です。

getTextStyles()メソッドとは?GASで複数セルの書式情報を一括取得する基本
Range.getTextStyles()メソッドは、Google Apps Scriptにおいて、指定したセル範囲(Rangeオブジェクト)内のすべてのセルに設定されているテキストの書式情報を、一度の呼び出しでまとめて二次元配列として取得するための機能です。
このメソッドを使用することで、広範囲のセルに設定されているフォント、色、太字、斜体などのスタイルを一括でプログラム的に確認できます。これにより、個々のセルに対してgetTextStyle()を繰り返し呼び出す非効率性を解消し、スクリプトの実行速度を劇的に向上させることができます。
getTextStyle()とgetTextStyles()の違いと効率性
| 特徴 | getTextStyle() | getTextStyles() |
|---|---|---|
| 対象セル数 | 指定範囲の左上の単一セルのみ | 複数セル範囲内のすべてのセル |
| 返り値 | TextStyleオブジェクト | TextStyleオブジェクトを含む二次元配列 |
| 効率性 | 単一セル向け。複数セルへのループ処理ではAPI呼び出しが増え非効率 | 一度のAPI呼び出しで複数セルの情報を取得できるため効率的 |
TextStyleオブジェクトで取得できる情報
getTextStyles()が返す二次元配列の各要素は、TextStyleオブジェクトです。このオブジェクトには、セルのテキストに適用されている以下の主要なスタイル情報が含まれています。
getFontFamily(): フォント名(例:"Arial","MS ゴシック")getFontSize(): フォントサイズ(ポイント、例:10,12)getForegroundColor(): 文字色(HEXコード、例:"#FF0000")isBold(): 太字かどうか(true/false)isItalic(): 斜体かどうか(true/false)isUnderline(): 下線があるかどうか(true/false)isStrikethrough(): 取り消し線があるかどうか(true/false)
基本的な使用例:A1からC3範囲のテキストスタイルを一括取得する
以下のスクリプトは、アクティブなシートのA1:C3範囲のテキストスタイルを一括で取得し、各セルのフォントファミリー、フォントサイズ、太字状態をログに出力する最も基本的な例です。
/**
* アクティブなシートのA1:C3範囲の全セルのテキストスタイルを一括取得し、ログに出力する関数。
*/
function getAndLogAllTextStyles() {
const sheet = SpreadsheetApp.getActiveSheet(); // アクティブなシートを取得
const range = sheet.getRange("A1:C3"); // 対象範囲をA1:C3に設定
// 指定範囲の各セルのTextStyleオブジェクトを二次元配列として一括取得
const stylesMatrix = range.getTextStyles();
// 取得した二次元配列の各要素(TextStyleオブジェクト)をループ処理
stylesMatrix.forEach((rowStyles, rowIndex) => {
rowStyles.forEach((cellStyle, colIndex) => {
// getCell(row, column) は1から始まるインデックス
const cellAddress = range.getCell(rowIndex + 1, colIndex + 1).getA1Notation();
if (cellStyle) {
Logger.log(`--- セル ${cellAddress} のスタイル ---`);
Logger.log(` フォントファミリー: ${cellStyle.getFontFamily() || 'なし'}`);
Logger.log(` フォントサイズ: ${cellStyle.getFontSize() || 'なし'}pt`);
Logger.log(` 太字: ${cellStyle.isBold() ? "有効" : "無効"}`);
Logger.log(` 文字色: ${cellStyle.getForegroundColor() || 'なし'}`);
} else {
Logger.log(`--- セル ${cellAddress} にはTextStyle情報がありません ---`);
}
});
});
}
このコードを実行すると、A1:C3範囲内のすべてのセルに設定されているテキストのスタイル情報がログに表示されます。
getTextStyles()の実践的な応用テクニック
getTextStyles()とその関連メソッドは、スプレッドシートの視覚的表現を自動化し、データ分析やレポート作成を支援する多岐にわたる場面で真価を発揮します。
1. シート全体や特定範囲のスタイル統一チェックと自動修正
スプレッドシートの特定の範囲やシート全体で、テキストスタイルが統一されているかを自動でチェックする機能は、データ入力の整合性を保ち、プロフェッショナルな見た目を維持する上で非常に重要です。異なるスタイルが検出された場合に警告を出すだけでなく、自動で修正することも可能です。
/**
* 指定範囲内のテキストスタイルが統一されているかをチェックし、異なるセルを特定する関数。
* 必要に応じてスタイルを自動修正する機能も実装できます。
*/
function checkAndCorrectTextStylesUniformity() {
const sheet = SpreadsheetApp.getActiveSheet();
const rangeToCheck = sheet.getRange("A1:E10"); // チェック対象範囲
const stylesMatrix = rangeToCheck.getTextStyles();
if (stylesMatrix.length === 0 || stylesMatrix[0].length === 0) {
Logger.log("チェック対象範囲にセルがありません。");
return;
}
// 基準となるスタイルを範囲の左上隅のセルから取得
const baseStyle = stylesMatrix[0][0];
const differences = [];
const newStylesMatrix = []; // 修正後のスタイルを格納する配列
stylesMatrix.forEach((rowStyles, rowIndex) => {
const newRow = [];
rowStyles.forEach((cellStyle, colIndex) => {
let isDifferent = false;
// フォントファミリー、サイズ、太字の状態を比較
if (cellStyle.getFontFamily() !== baseStyle.getFontFamily() ||
cellStyle.getFontSize() !== baseStyle.getFontSize() ||
cellStyle.isBold() !== baseStyle.isBold()) {
isDifferent = true;
}
if (isDifferent) {
differences.push(rangeToCheck.getCell(rowIndex + 1, colIndex + 1).getA1Notation());
// ★オプション: ここでgetTextStyle()を使って自動修正することも可能
// newRow.push(baseStyle); // 基準スタイルで上書き
newRow.push(SpreadsheetApp.newTextStyle()
.setFontFamily(baseStyle.getFontFamily())
.setFontSize(baseStyle.getFontSize())
.setBold(baseStyle.isBold())
.build());
} else {
newRow.push(cellStyle); // 変更がなければ元のスタイルを再利用
}
});
newStylesMatrix.push(newRow);
});
if (differences.length > 0) {
Logger.log(`異なるスタイルのセルが検出されました: ${differences.join(", ")}`);
// スタイルを自動修正する場合
// rangeToCheck.setTextStyles(newStylesMatrix);
// Logger.log("検出された異なるスタイルを基準スタイルに修正しました。");
} else {
Logger.log("指定範囲のすべてのセルのスタイルは統一されています。");
}
}
このスクリプトは、指定範囲内のスタイルをチェックし、異なるセルを特定します。コメントアウト部分を有効にすることで、自動修正機能も追加できます。
2. リッチテキスト内の部分スタイルをまとめて解析・操作する
getTextStyles()はTextStyleオブジェクトを返しますが、getRichTextValues()と組み合わせることで、リッチテキスト内の各ラン(スタイルが異なる部分)のスタイルを効率的に解析できます。これにより、特定のキーワードだけが太字になっているかをチェックしたり、リンクのスタイルを自動調整したりすることが可能になります。
/**
* リッチテキストを含むセル範囲の部分スタイルをgetRichTextValues()と組み合わせて解析する関数。
* 例: A1:C3範囲内のリッチテキストを解析。
*/
function analyzeRichTextStylesBatch() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange("A1:C3");
const richTextValues = range.getRichTextValues(); // リッチテキスト情報を一括取得
richTextValues.forEach((rowRichTextValues, rowIndex) => {
rowRichTextValues.forEach((richTextValue, colIndex) => {
const cellAddress = range.getCell(rowIndex + 1, colIndex + 1).getA1Notation();
if (richTextValue) {
richTextValue.getRuns().forEach((run, runIndex) => {
const runText = run.getText();
const runStyle = run.getTextStyle();
if (runStyle.isBold()) {
Logger.log(`セル ${cellAddress} のリッチテキスト内(「${runText}」)で太字が検出されました。`);
}
// 他のスタイル(色、サイズなど)もここでチェック可能
});
}
});
});
Logger.log("リッチテキスト内のスタイル解析が完了しました。");
}
3. 他のGoogleサービス(Googleスライドなど)と連携してスタイルを適用する
GASの強力な機能の一つは、異なるGoogleサービス間での連携です。スプレッドシートで定義されたテキストスタイル情報を取得し、それをGoogleスライドやGoogleドキュメントのテキストに適用するといった高度な連携が可能です。
/**
* スプレッドシートの指定範囲のテキストスタイルを、Googleスライドの複数図形テキストに適用する関数。
* Google Slides APIの有効化が必要な場合があります。
* ★注意: この例は概念的なもので、各図形のオブジェクトIDを事前に知る必要があります。
*/
function applySheetStylesToMultipleSlideShapes() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getActiveSheet();
const sourceRange = sheet.getRange("A1:C3"); // スタイルコピー元の範囲
const sourceStyles = sourceRange.getTextStyles(); // スタイル情報を一括取得
const presentationId = 'YOUR_PRESENTATION_ID'; // ★実際のスライドIDに置き換えてください
const slideIndex = 0; // 対象スライドのインデックス(0から始まる)
try {
const presentation = SlidesApp.openById(presentationId);
const slide = presentation.getSlides()[slideIndex];
const shapes = slide.getShapes(); // スライド内のすべての図形を取得
sourceStyles.forEach((rowStyles, rowIndex) => {
rowStyles.forEach((cellStyle, colIndex) => {
// 例: スプレッドシートのA1スタイルをスライドの最初の図形に、A2を二番目の図形に...
// 実際には、スプレッドシートのセルとスライドの図形オブジェクトIDをマッピングする必要があります。
const targetShapeIndex = rowIndex * sourceStyles[0].length + colIndex;
if (shapes.length > targetShapeIndex) {
const targetShape = shapes[targetShapeIndex];
const targetTextRange = targetShape.getText();
const targetTextStyle = targetTextRange.getTextStyle();
if (cellStyle && targetTextStyle) {
if (cellStyle.getFontFamily()) {
targetTextStyle.setFontFamily(cellStyle.getFontFamily());
}
if (cellStyle.getFontSize()) {
targetTextStyle.setFontSize(cellStyle.getFontSize());
}
targetTextStyle.setBold(cellStyle.isBold());
targetTextStyle.setItalic(cellStyle.isItalic());
targetTextStyle.setUnderline(cellStyle.isUnderline());
if (cellStyle.getForegroundColor()) {
targetTextStyle.setForegroundColor(cellStyle.getForegroundColor());
}
// 他のスタイルも同様に適用
}
}
});
});
Logger.log(`スプレッドシートのスタイルをスライドの複数の図形テキストに適用しました。`);
} catch (e) {
Logger.log(`Googleスライド連携エラー: ${e.message}`);
}
}
この連携により、スプレッドシートで管理している書式ルールを動的にプレゼンテーション資料に反映させるなど、より高度で統合された自動化が可能になります。
まとめ:getTextStyles()でGASスプレッドシートの視覚的表現と自動化を最大化
Google Apps ScriptのgetTextStyles()メソッドは、スプレッドシートの複数セルのテキストスタイル情報をプログラムで効率的に管理するための、非常に強力なツールです。
- 高速な書式情報の一括取得: 複数セルのフォント、色、太字、斜体などのスタイル情報を一度のAPI呼び出しで二次元配列として取得できるため、スクリプトの実行速度と効率が大幅に向上します。
- シートのスタイル統一と自動修正: 取得したスタイル情報に基づき、シート全体のデザインの一貫性をチェックし、必要に応じて自動修正する堅牢なスクリプトを構築できます。
- リッチテキストの詳細解析と操作:
getRichTextValues()と組み合わせることで、セル内のリッチテキストの部分的なスタイルも正確に解析・操作することが可能になります。 - 他のGoogleサービスとの高度な連携: 取得したスタイル情報をGoogleスライドなど他のサービスに適用することで、より高度で統合された自動化ソリューションを構築し、業務効率化と表現力向上に貢献します。
- 堅牢な大規模データ処理: バッチ処理を徹底することで、GASの実行制限を回避し、大量のデータを含むスプレッドシートでも安定してテキストスタイルを管理できます。
本記事で紹介したgetTextStyles()の知識と実践例を活用し、あなたのGASスクリプトをより高度で柔軟なスプレッドシート自動化ツールへと進化させてください。テキストスタイルの細かな制御は、ユーザーエクスペリエンスの向上、データの明確な可視化、そしてビジネスプロセスの最適化に大きく貢献します。


G Suite の機能や特長、他社サービスとの比較、便利な使い方や裏ワザ、よくある質問などを初心者に向けて丁寧に解説。G Suite を検討している会社様にとって有益な情報が盛りだくさん。

Learn best practices to improve the performance of your Apps Script projects.
