【GAS超入門】スプレッドシートに繰り返し処理を活用する

今回はスプレッドシートに繰り返し処理を実装する手順について解説します。

スプレッドシートの単純作業を自動化したい初心者の方に向けて、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つのセル指定方法

  1. A1形式: getRange("A1")
    • 列(アルファベット)と行(数字)で指定する方法です。
  2. R1C1形式 (行・列指定): getRange(row, column)
    • getRange(1, 1) のように、数値で「行番号, 列番号」を指定します。
    • getRange(1, 1) は「1行目の1列目」、つまり A1 セルを指します。
    • getRange(3, 2) は「3行目の2列目」、つまり B3 セルを指します。

getRange(行番号, 列番号) という指定方法は、for 文などの繰り返し処理で使う変数(数値)と非常に相性が良く、複数のセルを順番に操作する際に絶大な効果を発揮します。

よく使う準備のコード

繰り返し処理を試す前に、よく使う「お決まりのコード」を2つ紹介します。

  1. アクティブなシートの取得 SpreadsheetApp.getActiveSheet() を使うと、現在開いている(アクティブな)シートを直接取得できます。 JavaScriptfunction myFunction() { // 現在開いているシートを取得 const sheet = SpreadsheetApp.getActiveSheet(); // これで sheet 変数を使ってセル操作ができる }
  1. シート内容のクリア テスト実行する際、前回の結果が残っていると分かりにくいです。sheet.clear() を使うと、シートの内容(値や書式)をすべてリセットできます。 JavaScript// シートの内容をすべてクリア sheet.clear(); // 値だけをクリア(書式は残す) // sheet.clearContents(); // 書式だけをクリア(値は残す) // sheet.clearFormats();

事例1: for文で列に連番を入力する

まずは、for 文を使った最もシンプルな繰り返し処理です。 「A列の1行目から10行目まで、1から10の連番を入力する」スクリプトを作成します。

ステップバイステップ解説

  1. スプレッドシートを開き、「拡張機能」>「Apps Script」でスクリプトエディタを開きます。
  2. 以下のコードを入力します。JavaScriptfunction 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); } }
  3. 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つ組み合わせる「二重ループ(ネスト)」 を使って、九九の表を作成してみましょう。

ステップバイステップ解説

  1. 以下のコードをスクリプトエディタに入力します。JavaScriptfunction 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); } } }
  2. 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)は分かっていますが、もしデータ量が可変だった場合でも対応できるように、「データが入力されている範囲を自動で取得する」方法を使います。

ステップバイステップ解説

  1. 以下のコードをスクリプトエディタに入力します。JavaScriptfunction 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'); // 背景色を薄いグレーに }
  2. myFunction を実行して表を作成した後、formatKukuTable 関数を実行します。

実行結果

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

コードのポイント

  1. sheet.getDataRange() データが入力されている範囲(この場合は A1:I9)を Range オブジェクトとして取得します。データがどこからどこまであるか分からなくても、GASが自動で認識してくれる便利なメソッドです。
  2. range.setBorder(true, true, true, true, true, true) 取得した範囲に対して罫線を設定します。6つの引数はそれぞれ、上、左、下、右、範囲内の垂直線、範囲内の水平線に対応しています。
  3. メソッドチェーン headerRange.setFontWeight('bold').setBackground('#EEEEEE') の部分に注目してください。 setFontWeight で太字にした「後」、そのまま . (ドット) で繋げて setBackground で背景色を設定しています。 このように、同じ範囲に対して複数の設定を連続して行う記述方法を「メソッドチェーン」と呼び、コードを簡潔に書くことができます。

まとめ

今回は、GASの繰り返し処理 for 文と、スプレッドシートのセル操作を組み合わせる方法について学びました。

  • getRange(row, column) を使うと、数値(変数)で行・列を指定できる。
  • for 文は、決まった回数の繰り返し作業に最適。
  • for 文のネスト(二重ループ)で、2次元の表を扱える。
  • getDataRange() でデータ範囲を自動取得できる。
  • setBordersetHorizontalAlignment で書式も自動設定できる。

for ループをマスターすることは、GAS自動化の大きな一歩です。 最初は難しく感じるかもしれませんが、まずは「連番入力」のような簡単な処理から試してみてください。 「この手作業、for 文で自動化できるかも?」と考えるクセをつけることが上達への近道です。

Dチームメルマガ登録|eBOOK「逆引きAIツールブック」プレゼント中


AIやマーケティングに関する情報を不定期配信中
eBOOK「逆引きAIツールブック」プレゼント中です
↓ ↓ ↓

Dチームメルマガはこちら>>>

 

ABOUT US
山田 どうそん
受講生3万人以上のオンラインビジネス構築のやり方を教える講師|6年以上サブスクメンバーシップのコミュニティを運営|オンラインビジネスで安定したコミュニティシステムの作り方を教えている|1人でも多くの人にオンラインビジネスで物心両面の豊かさを手に入れられるようにディレクションできたらと思っている