Amazonで商品を見るセール会場へ

GAS│getValuesとsetValuesで一括処理する|遅い・6分制限を避ける書き方

GASでスプレッドシートを処理すると、行数が増えたときに遅くなり、6分の制限に当たることがあります。

公式のベストプラクティスにある、まとめて読み書きする書き方を紹介します。

  • セルを1つずつ読み書きせず、範囲をまとめて配列で読み込む
  • 処理は配列の上で行い、最後に1回で書き出す
  • 読み込みと書き込みを、交互に行わない
  • 公式のセル背景色を設定する例では、個別の書き込みが約70秒、一括の書き込みが約1秒とされている

公式資料に基づく説明と掲載コードのローカル検証を掲載しています。

上限や仕様は、Googleの都合で変わることがあります。

数値は、公式ページで最新を確かめてください。

目次

遅くなる書き方

var sheet = SpreadsheetApp.getActiveSheet();
for (var i = 1; i <= 100; i++) {
  var v = sheet.getRange(i, 1).getValue();
  sheet.getRange(i, 2).setValue(v * 2);
}

セルを1つ読んで1つ書く、を繰り返す形です。

そのたびに、スプレッドシートへ問い合わせが発生します。

まとめて読み書きする

function doubleNumbers() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('一括処理練習');
  if (!sheet) throw new Error('「一括処理練習」シートを作成してください。');
  const values = sheet.getRange('A2:A101').getValues();
  const output = values.map(function (row, index) {
    const value = row[0];
    if (value === '') return [''];
    if (typeof value !== 'number' || !Number.isFinite(value) || !Number.isFinite(value * 2)) {
      throw new Error('A' + (index + 2) + 'に数値以外、または計算できない値があります。');
    }
    return [value * 2];
  });
  sheet.getRange('B2:B101').setValues(output);
}

getValues() は、範囲を2次元配列で返します。

setValues()には、書き込み先の行数・列数と一致する2次元配列を渡します。

行数と列数が合わないと、エラーになります。

練習用データと実行手順

  1. 「一括処理練習」シートを作り、A1に入力、B1に結果と入力します。
  2. A2に10、A3は空欄、A4に0、A5に-3を入力します。
  3. 「拡張機能」→「Apps Script」にコードを保存し、doubleNumbersを実行します。
  4. B2は20、B3は空欄、B4は0、B5は-6になります。

対象はA2:A101の100行で、B2:B101の既存の値や数式は置き換わります。

この例は数値だけを2倍にし、文字列や日付が混じると書き込み前に止まります。

A列の数式は計算結果を読みますが、B列へ数式自体はコピーしません。

本番の表は複製してから試し、戻すときは複製元からB列を復元してください。

6分の制限

通常のスクリプト実行は1回6分までで、シンプルトリガーやカスタム関数には30秒など別の制限があります。

公式は、処理を分割して、インストール型トリガーとプロパティサービスで、続きから再開する方法を案内しています。

カスタム関数は、30秒までです。

データが1,000万セルに近づくときは、Cloud SQLやBigQueryの利用が案内されています。

実際の処理時間は、環境やデータで変わります。

この記事では、計測していません。

まとめ

  • 読み込みは1回、処理は配列の上、書き出しも1回
  • 読み書きを交互にしない
  • 6分を超えるなら、分割して再開する

参考:Google Apps Script「Best Practices」「Quotas for Google Services」(2026年9月30日確認)。

確認した範囲と公式資料

2026年10月2日に公式資料と掲載コードを照合しました。

コードの分岐はGoogleのサービスを代替したローカルテストで確認し、実サービスでの実行とは区別しています。

GAS上の認可・トリガー発火・同時実行は未検証です。

一括処理の公式指針 / Rangeの公式リファレンス

関連する手順:GASのLockServiceで同時実行を防ぐ|3種類のロックと書き方

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

スプレッドシート・GASのおすすめ書籍

作業環境の作り方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次