GAS学習note:Day2 セル操作の基礎とfor文で複数セルを処理しよう
はじめに
Day1では「Hello World」やセルに文字を書き込む体験をしました。
今回はもう一歩進んで、スプレッドシートのセル操作をしっかり学んでいきます。
具体的には:
セルから値を読み取る
セルに値を書き込む
複数セルをまとめて扱う
for文で繰り返し処理する
ここを押さえると、日々の業務でよくある「一覧データを一括処理するスクリプト」が書けるようになります。
セルに値を書き込む(復習)
function writeToSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange(1, 1).setValue("GASスタート!");
}
👉 実行するとA1セルに「GASスタート!」と表示されます。
この getRange(行番号, 列番号) がセルを指定する基本の形です。
セルから値を読み取る
function readFromSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const value = sheet.getRange(1, 1).getValue();
Logger.log("A1セルの値は: " + value);
}
👉 A1セルに書かれている内容がログに表示されます。
このように「取得」と「書き込み」を組み合わせると、データを加工できるようになります。

複数セルをまとめて操作する
例えば、A列の1〜5行にデータが入っていたとします。
それをまとめて読み取る場合は getValues() を使います。
function readMultipleCells() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const values = sheet.getRange(1, 1, 5, 1).getValues();
Logger.log(values);
}
👉 結果は「2次元配列」として返ってきます。
例えば [[データ1],[データ2],[データ3]...] の形になります。


for文で複数セルを処理する
繰り返し処理を加えると、一気に実用的になります。
たとえば「A1〜A10のデータに番号を振る」スクリプトはこう書けます。
function addNumbers() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow(); // 最終行を自動取得
for (let i = 1; i <= lastRow; i++) {
sheet.getRange(i, 2).setValue("No." + i);
}
}
👉 実行すると、B列に「No.1」「No.2」…と自動で番号が入ります。
これだけで「番号振り」や「一括入力」の作業がなくなります。

応用例:条件つきでセルを書き換える
「売上が100以上なら合格、それ以外は要改善」と判定したい場合もfor文でできます。
function checkScores() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
for (let i = 2; i <= lastRow; i++) {
const score = sheet.getRange(i, 1).getValue();
if (score >= 100) {
sheet.getRange(i, 2).setValue("合格");
} else {
sheet.getRange(i, 2).setValue("要改善");
}
}
}
👉 実行すると、A列の数値に応じてB列に「合格/要改善」が出力されます。
これは社内の簡単なチェック作業や、データ入力後の検証にそのまま使えます。

まとめ
getRange(row, col).setValue() でセルを書き込み
getRange(row, col).getValue() でセルを読み取り
getValues() を使うと複数セルをまとめて取得できる
for文を使えば「一括処理」「条件判定」が可能に
👉 Day2のここまでで「スプレッドシートの基本操作+繰り返し処理」を体験できました。
Day3では、さらに「条件分岐(if文)」を深掘りし、実用的なロジックを作っていきます。
✏️ 補足コラム:初心者がつまづきやすいエラーと対処法
GASを始めたばかりの頃、コードを実行すると 「エラー」 が出て焦ることがあります。
でも、ほとんどはちょっとした書き間違いや引数の指定ミスです。よくあるパターンをまとめました。
1. getRange の引数を間違える
// ❌ よくある間違い
sheet.getRange(0, 1).getValue();
👉 行番号や列番号は 1から始まります。
「0行目」や「0列目」は存在しないのでエラーになります。
// ✅ 正しい書き方
sheet.getRange(1, 1).getValue(); // A1セルを取得
2. セルの範囲を指定する数字が足りない
// ❌ よくある間違い
sheet.getRange(1, 1, 5);
👉 getRange で「範囲」を指定するときは、
行・列の開始位置+行数+列数 の4つを指定しないとエラーになります。
// ✅ 正しい書き方(1列で5行分を取得)
sheet.getRange(1, 1, 5, 1).getValues();
3. setValue と setValues を混同する
// ❌ よくある間違い
sheet.getRange(1, 1, 5, 1).setValue("テスト");
👉 setValue は1つのセル専用です。複数セルを対象にするとエラーになります。
// ✅ 正しい書き方(複数セルなら setValues)
const values = [["A"],["B"],["C"],["D"],["E"]];
sheet.getRange(1, 1, 5, 1).setValues(values);
4. 定義していない変数を使ってしまう
// ❌ よくある間違い
Logger.log(score); // 変数scoreを定義していない
👉 JavaScriptでは、宣言していない変数を使うとエラーになります。
// ✅ 正しい書き方
const score = sheet.getRange(1, 1).getValue();
Logger.log(score);
5. 実行ボタンを押し忘れる
意外と多いのが「コードを書いたのにシートに反映されない!」というケース。
単純に 実行(▶)を押していない だけだったりします。
🔑 エラーが出たときの対処法
エラーメッセージを確認する
画面下の「実行ログ」にエラーの詳細が表示されます
例:「Range not found(範囲が見つかりません)」
コードを一行ずつ確認する
行番号・列番号が正しいか?
単数用(setValue)と複数用(setValues)を混同していないか?
Logger.logでデバッグする
値が正しく取れているか確認するために、途中で Logger.log(変数) を仕込むのがおすすめ
💡 ポイントは「エラーは学びのチャンス」と思うこと。
ちょっと直すだけで動くようになるので、焦らず一歩ずつ進めましょう。
