⭐第4回:ゼロからはじめる!Googleスプレッドシート × JavaScript 入門『くり返し入力を自動化!for文で表をつくろう』
はじめに
前回までは 「ボタンを作ってスクリプトを動かす」 体験をしました。
今回は for文(くり返し処理) を使って、同じ処理をまとめて自動化します。
まずは“超スモールステップ”で、1行 → 3行 → 10行 と階段をのぼります。
ゴール(今日はここまで)
見出し行を入れられる
1行だけデータを書ける
3行→10行とくり返しを増やせる
(おまけ)高速な書き方の雰囲気を知る
STEP0:準備(まずは名前をつけよう)
📌 スプレッドシートの名前をつけよう
最初に、Googleスプレッドシートを開いてください。
左上に「無題のスプレッドシート」と表示されていますね。そこをクリックして、
「レッスン04_for文」 という名前をつけましょう。

📝 この名前は、あとでファイルを探すときにも役立ちます。
📌 プログラム(Apps Script)にも名前をつけよう
次に、スプレッドシートのメニューから
「拡張機能 → Apps Script」 をクリックしてみてください。
すると、プログラムを書く画面(スクリプトエディタ)が開きます。
左上に「無題のプロジェクト」と表示されているので、ここをクリックして
「レッスン04_for文」 と入力してください。

📝 スプレッドシートと同じ名前でOKです。
プログラム側にも名前をつけておくと、あとで管理がしやすくなります。
STEP1:まず、見出しだけ入れる
今回は、いよいよセルに文字を書いてみます。
といっても、最初からたくさん書くのではなく──
“まずは1行だけ” やってみましょう。
🛠 コードで書く意味は?
「見出しぐらい、手で書いた方が早くない?」
そう思うのが自然です。でも、ここであえてコードを書くのには理由があります。
getRange(行, 列) の使い方に慣れる
setValue() を使って、セルに文字が出る感覚をつかむ
「おお!本当に出た!」というちょっとした感動を味わう
コードを書いて、見出しがポンっと表示されたとき、
きっとこう思うはずです。
「うわっ、ほんまに出た!」
「なんか、ちょっと楽しいかも!」
この“ちょっとした成功体験”が、次のステップに進む力になります。
📝 まずは、こんなコード
以下のコードを、スクリプトエディタの Code.gs(コード.gs) に貼り付けてみましょう。
function writeHeader() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange(1, 1).setValue("名前");
sheet.getRange(1, 2).setValue("年齢");
sheet.getRange(1, 3).setValue("メール");
}
🧠 貼り付けたら、必ず保存(💾)をクリック!
保存しないと、ボタンを押しても実行されません。
▶ 実行すると…

スプレッドシートの1行目に「名前」「年齢」「メール」という見出しが表示されます。
それぞれ A1、B1、C1 のセルに入る形です。

「プログラムで表をつくる」って、こういうことなんだ!
……と少し実感できたら大成功です。
🔐 認証が必要な場合は…
はじめてスクリプトを実行するときは、「認証(アクセス許可)」の画面が出ることがあります。
そのときは、第3回の「ボタンを押して動かすマクロ」回の手順を参考にしてみてください。
https://note.com/fresh_aster974/n/ne87d3ad6670b
この見出しがうまく出れば、GASの基本が1つ使えたことになります!
ここまで来たら、次はいよいよ「くり返し」の世界へ。
STEP2:データを“1行だけ”入れる(for文の前に)
いきなり for に行きません。
まずは 1行ぶんだけ 確実に書けるようにします。
「この3行をくり返せばいいんだな」と気づくのが目的。
手順
Code.gs に以下を追加
function row1() {
const sh = SpreadsheetApp.getActive().getActiveSheet();
const row = 2; // データは2行目から
sh.getRange(row, 1).setValue(1); // 番号
sh.getRange(row, 2).setValue("ユーザー1"); // 名前
sh.getRange(row, 3).setValue(new Date()); // 登録日(今の日時)
}
保存 → ▶ 実行(※ 初回認証済みなら、そのまま動きます)
2行目に「1/ユーザー1/日時」が入ればOK。
ここで学ぶこと
データは見出しの次の行=2行目から入れる
「番号・名前・日時」の3セルを1セットで書けた
👉 画像案:
2行目に1件だけ入ったシートのスクショ
STEP3:3行ぶんくり返す(「おおっ!」を感じよう)
🌀 え?わざわざコードで書くの?
正直、このくらいなら手で打った方が速い。
――そう思いますよね? わかります!
でもここでやるのは、for文の最初の一歩。
「これができれば、100行も書けるようになる」
そんな魔法の入口なんです。
🧪 やってみよう!
今度は、見出しの下に、3行分のデータを入れてみます。
まずは、前に書いたコードのすぐ下に、こんな関数を追加してください。
💻サンプルコード
function writeThreeRows() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
for (let i = 2; i <= 4; i++) {
sheet.getRange(i, 1).setValue("山田太郎");
sheet.getRange(i, 2).setValue(25);
sheet.getRange(i, 3).setValue("taro@example.com");
}
}

💾 忘れずに「保存」!
右上のディスクマーク💾をクリックして保存しましょう。
保存しないと関数が実行できません!
▶ 実行してみよう!
writeThreeRows を関数一覧から選び
▶ボタンで実行
✅実行結果(イメージ)

🔍 コードのポイント(修正版)
i = 2 としているのは、「スプレッドシートの2行目から書き始めたいから」です。 (1行目は「見出し」として使っているため)
このコードでは、**「山田太郎」「25」「taro@example.com」**というデータを、同じ内容で3行くり返し入力しています。
for (let i = 2; i <= 4; i++) で、2〜4行目までの3回だけくり返しています。
※このあとのSTEPで、配列(names, ages, emails)を使って、1行ずつ違うデータを入れる方法を学びます。
✅ STEP4:毎回ちがうデータを入れる(配列 × くり返し)
🧠 ここまでで「同じデータを3行くり返す」ことはできましたね。
でも本当にやりたいのは、
「1行ずつちがう内容を自動で書いていく」こと。
そこで登場するのが「配列(はいれつ)」です!
📦 配列ってなに?
配列とは、**同じ種類のデータを “順番に並べて持っている箱”**のようなもの。
const names = ["山田太郎", "佐藤花子", "鈴木次郎"];
const ages = [25, 30, 22];
const emails = ["taro@example.com", "hanako@example.com", "jiro@example.com"];
👉 これで、それぞれの行に入れる名前・年齢・メールアドレスが用意できました!
🧑💻 実際のコード(writeThreeRows2)
function writeThreeRows2() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const names = ["山田太郎", "佐藤花子", "鈴木次郎"];
const ages = [25, 30, 22];
const emails = ["taro@example.com", "hanako@example.com", "jiro@example.com"];
for (let i = 0; i < names.length; i++) {
sheet.getRange(i + 2, 1).setValue(names[i]);
sheet.getRange(i + 2, 2).setValue(ages[i]);
sheet.getRange(i + 2, 3).setValue(emails[i]);
}
}
📌 どこにこのコードを書くの?
この関数 writeThreeRows2() は、すでに書いた writeHeader() や writeThreeRows() と**同じファイル(Code.gs/コード.gs)**の中に、
いちばん下に追加してください。
👇 つまり、エディタの中はこんなふうになります。
function writeHeader() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange(1, 1).setValue("名前");
sheet.getRange(1, 2).setValue("年齢");
sheet.getRange(1, 3).setValue("メール");
}
function writeThreeRows() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
for (let i = 2; i <= 4; i++) {
sheet.getRange(i, 1).setValue("山田太郎");
sheet.getRange(i, 2).setValue(25);
sheet.getRange(i, 3).setValue("taro@example.com");
}
}
function writeThreeRows2() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const names = ["山田太郎", "佐藤花子", "鈴木次郎"];
const ages = [25, 30, 22];
const emails = ["taro@example.com", "hanako@example.com", "jiro@example.com"];
for (let i = 0; i < names.length; i++) {
sheet.getRange(i + 2, 1).setValue(names[i]);
sheet.getRange(i + 2, 2).setValue(ages[i]);
sheet.getRange(i + 2, 3).setValue(emails[i]);
}
}💬 ワンポイント解説
「どこに追加すればいいの?」と悩んだら、すでにある関数の下に、同じように書くのが基本です。
エラーにならなければOK!ひとつずつ、丁寧にやっていきましょう😊
💾 貼り付けたら、保存 → 実行!
エディタの中に新しくこの関数 writeThreeRows2() を追加して、保存してから「実行」してください。

🔍 コードのポイント
i + 2 にしているのは、1行目が見出しだから、2行目からデータを書きたいためです。
names[i] のように書くと、配列の中から1つずつ、順番に取り出してくれます。
names.length は、「配列の中にいくつデータがあるか」を自動で数えてくれる便利な仕組みです。
👉 だから、3人分のデータが、くり返しで自動入力できるんです!
🚧 よくあるつまずき(前半のうちに潰す)
保存していない
→ 実行する前に、必ず 💾保存ボタンをクリック!
保存しないと、コードは反映されません。関数名ミス
→ writeHeader や writeThreeRows など、1文字でも違うと動きません。コピペ推奨!1行目を上書きしてしまう
→ i+1(または i+2)を忘れると、せっかくの見出しが消えてしまいます。認証が怖い(また出た!)
→ 第3回と同じように、内容を確認して「許可」すればOK。これは「このスクリプトを使ってもいいですか?」という確認です。
✅ STEP5:ボタンに割り当てよう
画像ボタンに、自動入力のスクリプトを割り当ててみましょう!
スプレッドシートに画像を挿入(例:「自動入力」の画像など)
画像を選んで右クリック(または3点メニュー)→「スクリプトを割り当て」
表示された入力欄に writeThreeRows2 と入力し、「OK」
これで、画像を押すだけで3人分のデータが入力されるボタンが完成です!
💡ポイント:
関数名は カッコ( )を付けずに writeThreeRows2 のみ入力します。
スペルミスや大文字小文字の違いに注意してください。
👉 ボタンの割り当て方法が分からない場合は、第2回を参照してください。
まとめ
1行 → 3行 → 配列で自動入力 と、階段をゆっくり上がることで理解が深まります。
for文は「初期値/条件/増やし方」の3点(例:let i = 0; i < 3; i++)を押さえれば大丈夫。
見出しは1行目、データは2行目から。だから i + 2 が鍵になります。
画像に関数 writeThreeRows2 を割り当てれば、ワンクリックで自動入力まで体験できます。
👉 次回:『条件で色を変える!if文でセルを見やすく』(第5回)
“しきい値で色分け”して、パッと見で伝わる表を作ります!
いいなと思ったら応援しよう!
🌿チップでの応援、ほんの少しでも嬉しいです。いただいたご支援は、新しい記事づくりの糧にします。