GASで高速二次元配列操作
GAS基礎と二次元配列
Google Apps Script(GAS)はスプレッドシートをはじめとするGoogle Workspaceを自動化するためのJavaScriptベースの環境です。スプレッドシートのセル範囲を取得すると、getValues() が二次元配列(行列)を返します。行列は「行データ」と「列データ」を同時に保持できるため、表データを扱う際に非常に便利です。二次元配列を操作することで、行単位でのデータ加工や列単位での集計を簡潔に実装できます。
行データを扱う getValues と setValues
スプレッドシートの範囲を取得し、getValues() で二次元配列を取得します。配列の各要素はセルの値で、array[row][col] の形でアクセスできます。逆に、加工した配列をスプレッドシートに書き戻す際は setValues() を使用します。setValues() は引数に二次元配列を渡すだけで、範囲全体に一括で書き込みが行われます。行データを一行ずつ処理する場合でも、配列を使えばループ内でのセルアクセスを最小限に抑えられます。
高速化のポイント:一括取得・一括書き込み
GAS でスプレッドシートを操作する際のボトルネックは「API 呼び出し」です。getValues() と setValues() は一度に範囲全体を取得・書き込む「一括取得」「一括書き込み」メソッドです。これらを使わずにセル単位で読み書きすると、何百回もの API 呼び出しが発生し、実行時間が大幅に増加します。高速化の基本は、必要なデータを一括で取得し、配列内で処理した後、一括で書き戻すことです。例えば、10,000 行のデータを更新する場合でも、1 回の getValues() と 1 回の setValues() で完結できます。
表データを行列として操作する
二次元配列は行列として扱うことができ、行列演算を行うことで集計やフィルタリングを効率化できます。Array.prototype.map() や reduce() を組み合わせると、行単位での集計(例:売上合計)や列単位での平均値計算が簡単に実装できます。また、Array.prototype.filter() を使えば、条件に合致する行だけを抽出し、新しい二次元配列として再構築できます。こうした操作はすべてメモリ上で完結し、スプレッドシートへの書き込みは最小限に抑えられます。
まとめ
GAS 基礎を押さえ、二次元配列を活用することで、スプレッドシートの表データを行列として効率的に操作できます。getValues() と setValues() を一括取得・一括書き込みで使用し、API 呼び出しを最小化することが高速化の鍵です。行データを配列で扱い、必要に応じて行列演算を組み合わせることで、複雑なデータ処理もシンプルに実装できます。ぜひこの手法をプロジェクトに取り入れ、スプレッドシート自動化のパフォーマンスを向上させてください。
コメント
コメントを投稿