見出し画像

GASでスプレッドシートの手作業を自動化する最初の一歩

この記事で得られること

「毎回同じ作業をスプレッドシートで手動でやっている」
そんな状況をGoogle Apps Script(GAS)で自動化する方法を、最小限のコードで解説します。

プログラミング経験がある方ならこの記事の内容は30分もあれば試せます。
GASを触ったことがなくても大丈夫です。

この記事では以下の3つだけに絞って説明します。

  • スプレッドシートのデータを読み書きする基本コード

  • ワンクリックで実行できるカスタムメニューの作り方

  • 毎日・毎週の自動実行を設定するトリガー

この3つが使えるだけで、日常の手作業はかなり減ります。




そもそもGASって何?

Google Apps Script(GAS)は、Googleが提供しているスクリプト環境です。
スプレッドシート、Gmail、Googleドライブなど、Googleのサービスをプログラムから操作できます。

エンジニアにとっての嬉しいポイントは以下の通りです。

  • 環境構築が不要。ブラウザだけで書いて動かせる

  • JavaScriptベース。新しい言語を覚える必要がほぼない

  • 無料。Googleアカウントがあれば誰でも使える

  • 外部APIも叩ける。`UrlFetchApp`でHTTPリクエストを投げられる

特に最後の「外部APIを叩ける」のが強力で、スプレッドシートを簡易的なダッシュボードやデータ収集ツールに変えることができます。


準備:スクリプトエディタを開く

  1. Googleスプレッドシートを開く(新規でも既存でもOK)

  2. メニューバーの「拡張機能」→「Apps Script」をクリック

  3. スクリプトエディタが別タブで開く

これだけです。IDEのインストールも、パッケージマネージャーも要りません。


基本① シートのデータを読み書きする

データを読む

まずスプレッドシートからデータを取得する基本形です。

function readData() {
  // アクティブなスプレッドシートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // A1セルの値を取得
  const singleValue = sheet.getRange('A1').getValue();
  Logger.log('A1の値: ' + singleValue);

  // A1:C10の範囲を二次元配列で取得
  const rangeValues = sheet.getRange('A1:C10').getValues();
  Logger.log('取得した行数: ' + rangeValues.length);

  // 各行をループ処理
  rangeValues.forEach((row, index) => {
    Logger.log(`行${index + 1}: ${row[0]}, ${row[1]}, ${row[2]}`);
  });
}

ポイントはgetValues()が二次元配列を返すことです。row[0]がA列、row[1]がB列に対応します。

データを書く

function writeData() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 単一セルに書き込み
  sheet.getRange('A1').setValue('こんにちは');

  // 複数セルに一括書き込み(二次元配列で渡す)
  const data = [
    ['商品A', 1000, '在庫あり'],
    ['商品B', 2500, '在庫なし'],
    ['商品C', 800, '在庫あり']
  ];
  sheet.getRange(2, 1, data.length, data[0].length).setValues(data);
}

setValues()で一括書き込みするのが大事です。
1セルずつsetValue()を呼ぶとセルの数だけAPIコールが走って非常に遅くなります。

読み書きはなるべくまとめてやる
これはGAS開発で最初に覚えるべき鉄則です。


基本② カスタムメニューを作る

スクリプトを毎回エディタから実行するのは面倒です。
スプレッドシートのメニューバーに自分用のメニューを追加しましょう。

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('自動化ツール')
    .addItem('データを読み込む', 'readData')
    .addItem('データを書き込む', 'writeData')
    .addSeparator()
    .addItem('シートをクリア', 'clearSheet')
    .addToUi();
}

function clearSheet() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastRow = sheet.getLastRow();
  if (lastRow > 1) {
    sheet.getRange(2, 1, lastRow - 1, sheet.getLastColumn()).clearContent();
  }
}

onOpen()はGASの特殊関数でスプレッドシートを開いたときに自動実行されます。
この中でcreateMenu()を呼べば、メニューバーに「自動化ツール」という項目が表示されます。

clearSheet()のように、1行目(ヘッダー)を残して中身だけクリアする関数を用意しておくと、繰り返し使うツールとして便利です。


基本③ トリガーで自動実行する

「毎朝9時にデータを更新したい」「毎週月曜にレポートを生成したい」
こうした定期実行はGASのトリガーで実現できます。

GUIから設定する方法

  1. スクリプトエディタの左メニュー「トリガー」(時計アイコン)をクリック

  2. 「トリガーを追加」をクリック

  3. 実行する関数・実行タイミングを選ぶ

コードから設定する方法

/**
 * トリガーをコードで設定する(初回1回だけ実行すればOK)
 */
function createDailyTrigger() {
  // 既存の同名トリガーを削除(重複防止)
  const triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(trigger => {
    if (trigger.getHandlerFunction() === 'readData') {
      ScriptApp.deleteTrigger(trigger);
    }
  });

  // 毎日午前9時に実行
  ScriptApp.newTrigger('readData')
    .timeBased()
    .everyDays(1)
    .atHour(9)
    .create();

  Logger.log('トリガーを設定しました');
}

注意点としてGASのトリガーには実行時間の上限があります。
無料のGoogleアカウントでは1回の実行が6分まで。

大量データを処理する場合は、処理を分割する工夫が必要です。


実践例:データ整形の自動化

ここまでの基本を組み合わせたちょっとした実践例です。

「B列に入っている金額データに通貨記号が混ざっていて、数値として扱えない」
こんな状況をGASで一括クリーニングします。

/**
 * B列の金額データから通貨記号を除去して数値に変換
 */
function cleanPriceColumn() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastRow = sheet.getLastRow();

  if (lastRow < 2) return; // データがなければ終了

  // B2:B列のデータを一括取得
  const range = sheet.getRange(2, 2, lastRow - 1, 1);
  const values = range.getValues();

  // クリーニング処理
  const cleaned = values.map(row => {
    const raw = String(row[0]);
    // ¥, $, €, カンマ, スペースを除去して数値化
    const num = parseFloat(raw.replace(/[¥$€,\s]/g, ''));
    return [isNaN(num) ? row[0] : num]; // 変換失敗時は元の値を残す
  });

  // 一括書き戻し
  range.setValues(cleaned);
  Logger.log(`${cleaned.length}行のデータをクリーニングしました`);
}

ポイントはisNaN()でのガード処理です。
想定外のデータが混ざっていても元の値を保持するので安心して実行できます。


まとめ

この記事で紹介した3つの基本

  • データの読み書き

  • カスタムメニュー

  • トリガー

だけで日常的なスプレッドシート作業のかなりの部分を自動化できます。

特に覚えておきたいのは以下の点です。

  • getValues() / setValues()で一括処理する(1セルずつの操作は遅い)

  • onOpen()でカスタムメニューを作ればエディタを開かずに実行できる

  • トリガーを使えば完全自動化も可能

次のステップとしてGASの本当に強力な部分は外部APIとの連携です。UrlFetchAppを使えばスプレッドシートを起点にしてあらゆる外部サービスのデータを取得・操作できるようになります。

次の記事ではGASから外部APIを叩く基本パターンと認証の考え方を解説しています!


このnoteでは副業・自動化の実践過程を発信しています。
外部API連携の実践例としてeBay APIとGASを組み合わせたリサーチ自動化ツールの作り方も公開しています。

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