Google Apps Script (GAS) を用いたスプレッドシートの自動化において、特に大規模なデータや複雑なレポートを扱う場合には、複数セルのテキスト回転設定を効率的に管理することが、データの視認性やレイアウトの整合性を保つ上で非常に重要になります。getTextRotations()メソッドは、このニーズに応える強力な一括取得機能を提供します。
本記事では、GASのRange.getTextRotations()メソッドを徹底解説します。複数セルのテキスト回転角度や縦書き設定を一括で取得する基本から、TextRotationオブジェクトの詳細、さらにはテキスト長に応じた動的な回転調整、複数シート間での設定同期、**大規模データ処理におけるパフォーマンス最適化(バッチ処理)**といった実践的な応用例まで、具体的なコードを交えて分かりやすく紹介します。
GAS初心者から、スプレッドシートの視覚的表現と自動化の効率をさらに高めたい上級者まで、すべての方に役立つ情報が満載です。

getTextRotations()メソッドとは?GASで複数セルのテキスト回転を一括取得する基本
Range.getTextRotations()メソッドは、Google Apps Scriptにおいて、指定したセル範囲(Rangeオブジェクト)内のすべてのセルに設定されているテキスト回転情報を、一度の呼び出しでまとめて二次元配列として取得するための機能です。
このメソッドを使用することで、広範囲のセルに設定されているテキストの回転角度や縦書きの状態を一括でプログラム的に確認できます。これにより、個々のセルに対してgetTextRotation()を繰り返し呼び出す非効率性を解消し、スクリプトの実行速度を劇的に向上させることができます。
TextRotationオブジェクトの構造
getTextRotations()が返す二次元配列の各要素は、TextRotationオブジェクトです。このオブジェクトには、以下の主要なプロパティが含まれています。
getDegrees(): テキストの回転角度を-90度から90度の範囲の整数値で返します。isVertical(): テキストが縦書きに設定されているかどうかを真偽値(true/false)で返します。
基本的な使用例:B2からC3範囲のテキスト回転設定を一括取得する
以下のスクリプトは、アクティブなシートのB2:C3範囲のテキスト回転設定を一括で取得し、各セルの回転角度と縦書き状態をログに出力する最も基本的な例です。
/**
* アクティブなシートのB2:C3範囲の全セルのテキスト回転設定を一括取得し、ログに出力する関数。
*/
function getAndLogAllTextRotations() {
const sheet = SpreadsheetApp.getActiveSheet(); // アクティブなシートを取得
const range = sheet.getRange("B2:C3"); // 対象範囲をB2:C3に設定
// 指定範囲の各セルのTextRotationオブジェクトを二次元配列として一括取得
const rotations = range.getTextRotations();
// 取得した二次元配列の各要素(TextRotationオブジェクト)をループ処理
rotations.forEach((rowRotations, rowIndex) => {
rowRotations.forEach((cellRotation, colIndex) => {
// getCell(row, column) は1から始まるインデックス
const cellAddress = range.getCell(rowIndex + 1, colIndex + 1).getA1Notation();
Logger.log(`セル ${cellAddress}: 回転角度 ${cellRotation.getDegrees()}°, 縦書き ${cellRotation.isVertical() ? "有効" : "無効"}`);
});
});
}
このコードを実行すると、B2:C3範囲内のすべてのセルに設定されているテキストの回転角度と縦書き状態がログに表示されます。
注意点: TextRotation.isVertical()がtrueの場合、TextRotation.getDegrees()は常に0度を返します。これは、縦書き設定が優先され、個別の回転角度設定は無視されるためです。
getTextRotations()の実践的な応用テクニック
getTextRotations()とその関連メソッドは、スプレッドシートの視覚的表現を自動化し、データ分析やレポート作成を支援する多岐にわたる場面で真価を発揮します。
1. テキスト長に応じた動的な回転調整
セル内のテキストが長すぎて表示しきれない場合に、自動でテキストの回転角度を調整するような処理を実装できます。これにより、手動での調整の手間を省き、シート全体のデザインを統一できます。
/**
* データ範囲内のセルのテキスト長に応じて、テキストの回転角度を動的に調整する関数。
* テキスト長が15文字を超えるセルは45度回転させ、それ以外は0度に戻します。
*/
function adjustTextRotationBasedOnLength() {
const sheet = SpreadsheetApp.getActiveSheet();
const dataRange = sheet.getDataRange(); // シート内のデータが存在する全範囲を取得
const rotations = dataRange.getTextRotations(); // 全範囲のテキスト回転情報を一括取得
const values = dataRange.getValues(); // 全範囲のセル値(テキスト長取得用)を一括取得
const newRotations = []; // 新しい回転設定を格納する二次元配列
rotations.forEach((rowRotations, rowIndex) => {
const newRowRotations = [];
rowRotations.forEach((cellRotation, colIndex) => {
const cellValue = values[rowIndex][colIndex]; // セル値を取得
const textLength = String(cellValue).length; // テキスト長を計算
let targetDegrees = 0; // デフォルトは0度
// テキストが縦書きではない場合のみ角度調整を検討
if (!cellRotation.isVertical()) {
if (textLength > 15) { // 例: テキストが15文字を超える場合
targetDegrees = 45; // 45度回転
}
}
// 現在の回転角度が目標と異なる場合のみ更新
if (cellRotation.getDegrees() !== targetDegrees) {
newRowRotations.push(SpreadsheetApp.newTextRotation().setDegrees(targetDegrees).build());
} else {
newRowRotations.push(cellRotation); // 変更不要な場合は既存のオブジェクトを再利用
}
});
newRotations.push(newRowRotations);
});
// 新しい回転設定を一括でシートに適用
dataRange.setTextRotations(newRotations);
Logger.log("テキスト長に基づいて回転角度を動的に調整しました。");
}
2. 複数シート間での回転設定の同期
複数のシート間で同じテキスト回転設定を適用したい場合、getTextRotations()とsetTextRotations()を組み合わせることで効率的に同期できます。これは、一貫したレポートデザインを維持する際に非常に有用です。
/**
* テンプレートシートのテキスト回転設定を、別のレポートシートに同期する関数。
*/
function synchronizeRotationsAcrossSheets() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sourceSheet = ss.getSheetByName('テンプレートシート'); // コピー元シート
const targetSheet = ss.getSheetByName('レポートシート'); // コピー先シート
if (!sourceSheet || !targetSheet) {
Logger.log("エラー: ソースまたはターゲットシートが見つかりません。");
return;
}
const sourceRange = sourceSheet.getRange('A1:D10'); // コピー元の範囲を指定
const targetRange = targetSheet.getRange('A1:D10'); // コピー先の範囲を指定
// コピー元の範囲からテキスト回転設定を一括取得
const sourceRotations = sourceRange.getTextRotations();
// コピー先の範囲に取得した設定を一括で適用
targetRange.setTextRotations(sourceRotations);
Logger.log(`「${sourceSheet.getName()}」シートの回転設定を、「${targetSheet.getName()}」シートの範囲 ${targetRange.getA1Notation()} に同期しました。`);
}
3. 大規模データ処理におけるパフォーマンス最適化(バッチ処理の徹底)
GASスクリプトの実行において、API呼び出し回数はパフォーマンスに直結します。getTextRotations()やsetTextRotations()のようなバッチ処理メソッドを最大限に活用し、大量のデータを扱う際には、必要に応じてさらに小さなバッチに分割して処理することで、メモリ使用量を抑えつつ高速な処理を実現できます。
/**
* 大規模なデータ範囲のテキスト回転設定を、バッチ処理で効率的に取得・設定する関数。
*/
function processLargeRangeTextRotationsEfficiently() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('大規模データ');
if (!sheet) {
Logger.log("エラー: '大規模データ' シートが見つかりません。");
return;
}
const fullRange = sheet.getDataRange();
const numRows = fullRange.getNumRows();
const numCols = fullRange.getNumColumns();
const batchSize = 1000; // 処理する行のバッチサイズ
for (let i = 0; i < numRows; i += batchSize) {
const currentBatchNumRows = Math.min(batchSize, numRows - i);
const batchRange = fullRange.offset(i, 0, currentBatchNumRows, numCols); // 現在のバッチ範囲を取得
// バッチ範囲のテキスト回転設定を取得
const rotations = batchRange.getTextRotations();
const newRotations = []; // 新しい回転設定を格納する配列
rotations.forEach(rowRotations => {
const newRow = rowRotations.map(cellRotation => {
// 例: 縦書きのセルは中央揃えにする
if (cellRotation.isVertical()) {
// setTextRotation()はTextRotationオブジェクトを期待するため、新しいオブジェクトを構築
return SpreadsheetApp.newTextRotation().setDegrees(0).setVertical(true).build();
}
return cellRotation; // 変更がなければ元のオブジェクトを使用
});
newRotations.push(newRow);
});
batchRange.setTextRotations(newRotations); // バッチ範囲に新しい回転設定を適用
// Utilities.sleep(100); // 必要に応じてAPI呼び出し間隔を調整
}
Logger.log("大規模データ範囲のテキスト回転設定を効率的に処理しました。");
}
この例では、データを小さなバッチに分割して処理し、各バッチで取得・設定を行うことで、GASの実行制限(特にメモリ使用量や実行時間)を回避しやすくなります。
まとめ:getTextRotations()でGASスプレッドシートの視覚的表現を最大化
Google Apps ScriptのgetTextRotations()メソッドは、スプレッドシートの複数セルのテキスト回転設定をプログラムで効率的に管理するための、非常に強力なツールです。
- 高速な一括取得: 複数セルのテキスト回転情報(角度、縦書き状態)を一度のAPI呼び出しで二次元配列として取得できるため、スクリプトの実行速度と効率が大幅に向上します。
- 動的なレイアウト調整: テキスト長やその他の条件に基づいてテキスト回転を自動調整したり、テンプレートの書式を複数のシートに同期したりすることで、手動作業を削減し、シートの視認性とデザインの一貫性を保てます。
- 堅牢な大規模データ処理: バッチ処理を徹底することで、GASの実行制限を回避し、大量のデータを含むスプレッドシートでも安定してテキスト回転設定を管理できます。
本記事で紹介したgetTextRotations()の知識と実践例を活用し、あなたのGASスクリプトをより高度で柔軟なスプレッドシート自動化ツールへと進化させてください。テキスト回転の細かな制御は、スプレッドシートの表現力を高め、ユーザーエクスペリエンスの向上とビジネスプロセスの最適化に大きく貢献します。


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

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