今回はスプレッドシートに繰り返し処理を実装する手順について解説します。
スプレッドシートの単純作業を自動化したい初心者の方に向けて、for ループを使ったセルの操作方法を解説します。
GASで単純作業を自動化する
for文を使ったスプレッドシート繰り返し処理入門
スプレッドシートで、A列の1行目から100行目まで連番を振りたい時、どうしていますか? もしくは、B列のデータを見ながらC列に同じ内容を転記する時、一つずつコピー&ペーストしていませんか?
こういった「同じルールの繰り返し作業」は、手作業で行うと時間がかかり、ミスも起こりやすくなります。
Google Apps Script(GAS)の「繰り返し処理」を使えば、このような退屈な作業を瞬時に自動化できます。
スプレッドシート操作と「繰り返し」の相性
GASでスプレッドシートを操作する際、 getRange("A1") や getRange("B2:C5") のように、セルの番地を直接指定する方法(A1形式)を使ってきました。
しかし、繰り返し処理を行う場合、「1行目、2行目、3行目…」や「1列目、2列目、3列目…」といった「数値」でセルを扱えると便利です。
そこで登場するのが、行番号と列番号でセルを指定する方法です。
2つのセル指定方法
- A1形式:
getRange("A1")- 列(アルファベット)と行(数字)で指定する方法です。
- R1C1形式 (行・列指定):
getRange(row, column)getRange(1, 1)のように、数値で「行番号, 列番号」を指定します。getRange(1, 1)は「1行目の1列目」、つまり A1 セルを指します。getRange(3, 2)は「3行目の2列目」、つまり B3 セルを指します。

getRange(行番号, 列番号) という指定方法は、for 文などの繰り返し処理で使う変数(数値)と非常に相性が良く、複数のセルを順番に操作する際に絶大な効果を発揮します。
よく使う準備のコード
繰り返し処理を試す前に、よく使う「お決まりのコード」を2つ紹介します。
- アクティブなシートの取得
SpreadsheetApp.getActiveSheet()を使うと、現在開いている(アクティブな)シートを直接取得できます。 JavaScriptfunction myFunction() { // 現在開いているシートを取得 const sheet = SpreadsheetApp.getActiveSheet(); // これで sheet 変数を使ってセル操作ができる }

- シート内容のクリア テスト実行する際、前回の結果が残っていると分かりにくいです。
sheet.clear()を使うと、シートの内容(値や書式)をすべてリセットできます。 JavaScript// シートの内容をすべてクリア sheet.clear(); // 値だけをクリア(書式は残す) // sheet.clearContents(); // 書式だけをクリア(値は残す) // sheet.clearFormats();

事例1: for文で列に連番を入力する
まずは、for 文を使った最もシンプルな繰り返し処理です。 「A列の1行目から10行目まで、1から10の連番を入力する」スクリプトを作成します。
ステップバイステップ解説
- スプレッドシートを開き、「拡張機能」>「Apps Script」でスクリプトエディタを開きます。
- 以下のコードを入力します。JavaScript
function myFunction() { // 1. アクティブなシートを取得 const sheet = SpreadsheetApp.getActiveSheet(); // 2. シートをクリア sheet.clear(); // 3. 繰り返し処理 (i を 1 から 10 まで 1ずつ増やす) for (let i = 1; i <= 10; i++) { // i行目の1列目(A列)に、i の値を設定 sheet.getRange(i, 1).setValue(i); } } myFunction関数を実行します。

実行結果
スプレッドシートのA1セルからA10セルまでに、1から10の数値が入力されます。

コードのポイント
for (let i = 1; i <= 10; i++) の部分が繰り返し処理です。 i という変数が 1 から始まり、10 になるまで処理が繰り返されます。
- 1周目:
iは 1。getRange(1, 1).setValue(1)が実行され、A1セルに「1」が入力されます。 - 2周目:
iは 2。getRange(2, 1).setValue(2)が実行され、A2セルに「2」が入力されます。 - …
- 10周目:
iは 10。getRange(10, 1).setValue(10)が実行され、A10セルに「10」が入力されます。
このように、getRange(i, 1) の i の部分を変数にすることで、対象のセルを動的に変更できます。
事例2: 二重ループ(ネスト)で表を作成する
次に、for 文を2つ組み合わせる「二重ループ(ネスト)」 を使って、九九の表を作成してみましょう。
ステップバイステップ解説
- 以下のコードをスクリプトエディタに入力します。JavaScript
function myFunction() { const sheet = SpreadsheetApp.getActiveSheet(); sheet.clear(); // 1. 外側のループ (行: row を 1 から 9 まで) for (let row = 1; row <= 9; row++) { // 2. 内側のループ (列: col を 1 から 9 まで) for (let col = 1; col <= 9; col++) { // 3. セルに計算結果 (row * col) を設定 // 例: rowが2, colが3 の時 -> getRange(2, 3) に 2*3=6 を設定 sheet.getRange(row, col).setValue(row * col); } } } myFunction関数を実行します。

実行結果
シートのA1セルからI9セルまでに、九九の計算結果(1×1〜9×9)が入力された表が作成されます。

コードのポイント
二重ループは、外側のループが1回実行されるたびに、内側のループがすべて(この場合は9回)実行されます。
- 外側
rowが 1 の時:- 内側
colが 1〜9 まで実行される (getRange(1, 1)〜getRange(1, 9))
- 内側
- 外側
rowが 2 の時:- 内側
colが 1〜9 まで実行される (getRange(2, 1)〜getRange(2, 9))
- 内側
- …
- 外側
rowが 9 の時:- 内側
colが 1〜9 まで実行される (getRange(9, 1)〜getRange(9, 9))
- 内側
このように、行と列を同時に変数で制御することで、2次元の表データを効率的に作成できます。
事例3: 範囲を自動取得して書式を設定する
最後に、作成した九九の表に「罫線」や「中央揃え」といった書式を設定します。 表のサイズ(9×9)は分かっていますが、もしデータ量が可変だった場合でも対応できるように、「データが入力されている範囲を自動で取得する」方法を使います。
ステップバイステップ解説
- 以下のコードをスクリプトエディタに入力します。JavaScript
function formatKukuTable() { const sheet = SpreadsheetApp.getActiveSheet(); // 1. データが入力されている範囲を自動で取得 const range = sheet.getDataRange();// 取得した範囲をログに出力(例: "A1:I9") console.log(range.getA1Notation()); // 2. 範囲全体に罫線を引く // (上, 左, 下, 右, 範囲内の垂直線, 範囲内の水平線) range.setBorder(true, true, true, true, true, true); // 3. 範囲全体を中央揃えにする range.setHorizontalAlignment('center'); // 4. メソッドチェーンで1行目を装飾 const headerRange = sheet.getRange(1, 1, 1, 9); // 1行目・1列目から 1行・9列分 headerRange .setFontWeight('bold') // 太字 .setBackground('#EEEEEE'); // 背景色を薄いグレーに } myFunctionを実行して表を作成した後、formatKukuTable関数を実行します。

実行結果
九九の表全体に罫線が引かれ、すべてのセルが中央揃えになります。 さらに、1行目(ヘッダー行)が太字になり、背景色が設定されます。

コードのポイント
sheet.getDataRange()データが入力されている範囲(この場合は A1:I9)をRangeオブジェクトとして取得します。データがどこからどこまであるか分からなくても、GASが自動で認識してくれる便利なメソッドです。range.setBorder(true, true, true, true, true, true)取得した範囲に対して罫線を設定します。6つの引数はそれぞれ、上、左、下、右、範囲内の垂直線、範囲内の水平線に対応しています。- メソッドチェーン
headerRange.setFontWeight('bold').setBackground('#EEEEEE')の部分に注目してください。setFontWeightで太字にした「後」、そのまま.(ドット) で繋げてsetBackgroundで背景色を設定しています。 このように、同じ範囲に対して複数の設定を連続して行う記述方法を「メソッドチェーン」と呼び、コードを簡潔に書くことができます。
まとめ
今回は、GASの繰り返し処理 for 文と、スプレッドシートのセル操作を組み合わせる方法について学びました。
getRange(row, column)を使うと、数値(変数)で行・列を指定できる。for文は、決まった回数の繰り返し作業に最適。for文のネスト(二重ループ)で、2次元の表を扱える。getDataRange()でデータ範囲を自動取得できる。setBorderやsetHorizontalAlignmentで書式も自動設定できる。
for ループをマスターすることは、GAS自動化の大きな一歩です。 最初は難しく感じるかもしれませんが、まずは「連番入力」のような簡単な処理から試してみてください。 「この手作業、for 文で自動化できるかも?」と考えるクセをつけることが上達への近道です。












