見出し画像

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. 実行ボタンを押し忘れる

意外と多いのが「コードを書いたのにシートに反映されない!」というケース。
単純に 実行(▶)を押していない だけだったりします。


🔑 エラーが出たときの対処法

  1. エラーメッセージを確認する

    • 画面下の「実行ログ」にエラーの詳細が表示されます

    • 例:「Range not found(範囲が見つかりません)」

  2. コードを一行ずつ確認する

    • 行番号・列番号が正しいか?

    • 単数用(setValue)と複数用(setValues)を混同していないか?

  3. Logger.logでデバッグする

    • 値が正しく取れているか確認するために、途中で Logger.log(変数) を仕込むのがおすすめ


💡 ポイントは「エラーは学びのチャンス」と思うこと。
ちょっと直すだけで動くようになるので、焦らず一歩ずつ進めましょう。

いいなと思ったら応援しよう!

この記事が参加している募集