GASを使ったスプレッドシートの入力チェック強化

GASスプレッドシート品質管理
GASを使ったスプレッドシートの入力チェック強化のサムネイル

こんにちは、GASおじです。今日は中小企業の経営者やフリーランスの皆さん向けに、Googleスプレッドシートの入力チェックをGoogle Apps Script(以下GAS)で強化する方法を解説します。入力ミスが多いと業務効率は落ちるし、品質管理にも悪影響。そこで、GASを使って「既存データを壊さずに」「バッチ処理でまとめて」「バックアップやロールバックもできる」堅牢な仕組みを作りましょう。


なぜ入力チェック強化が必要なのか?

スプレッドシートは手軽に使えて便利ですが、入力ミスや不正なデータが混入すると困りますよね。たとえば、数値の桁数間違いや、日付フォーマットの揺れ、空欄データの混入など。

GASを使えば、入力時のバリデーションを自動化し、ミスを未然に防止できます。また、誤入力があっても元データを消さず、新規シートやファイルに結果を書き出すので、データの安全性が確保されます。加えて、処理前にバックアップを作成し、必要ならロールバックも可能。SaaSの追加課金は不要で、Googleアカウントの利用枠内で動きます。ただしApps Scriptの実行制限はあるので大量データは注意が必要です。


初期設定と必要権限

まずはGoogleスプレッドシートとGASの初期設定です。

  1. スプレッドシートを開き、メニューの「拡張機能」→「Apps Script」を選択
  2. 新規プロジェクトに以下のスクリプトを貼り付けます
  3. 初回実行時にGoogleアカウントの認証を求められるので承認してください
  4. スクリプトはスプレッドシートのデータへの読み書き権限が必要です

また「installable trigger」を使って、編集後や指定時間に自動実行も可能です。トリガーはGASの画面で「時計」アイコンから設定できます。


コード例:入力チェックとバッチ書き込み、バックアップ機能

以下のコードは、

  • 元データの入力チェック(数値チェック、必須項目チェックなど)
  • チェック結果を新規の日時付きシートにまとめて書き出し
  • 変更前のバックアップを新しいファイルに保存
  • ロールバック用にバックアップファイルのURLをログ出力

を実装しています。

function validateAndBackup() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName("入力データ");
  if (!sourceSheet) {
    Logger.log("「入力データ」シートが存在しません");
    return;
  }

  // データ取得(ヘッダー含む)
  const dataRange = sourceSheet.getDataRange();
  const data = dataRange.getValues();

  // バックアップ用に新しいスプレッドシート作成
  const backupSs = SpreadsheetApp.create("バックアップ_" + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMdd_HHmmss"));
  const backupSheet = backupSs.getActiveSheet();
  backupSheet.getRange(1, 1, data.length, data[0].length).setValues(data);

  // 入力チェック結果用の新規シート作成
  const resultSheetName = "チェック結果_" + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMdd_HHmmss");
  const resultSheet = ss.insertSheet(resultSheetName);

  // チェック結果配列作成(ヘッダー+判定列追加)
  const result = [];
  const header = data[0].slice();
  header.push("チェック結果");
  result.push(header);

  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    let checkMsg = "";

    // 例:1列目は必須、2列目は数値のみ、3列目は日付形式
    if (!row[0]) {
      checkMsg += "1列目が空欄; ";
    }
    if (row[1] !== "" && typeof row[1] !== "number") {
      checkMsg += "2列目は数値で; ";
    }
    if (row[2] !== "" && !(row[2] instanceof Date)) {
      checkMsg += "3列目は日付形式で; ";
    }

    if (checkMsg === "") checkMsg = "OK";

    const newRow = row.slice();
    newRow.push(checkMsg);
    result.push(newRow);
  }

  // チェック結果をまとめて書き込み
  resultSheet.getRange(1, 1, result.length, result[0].length).setValues(result);

  // ログにバックアップURL出力
  Logger.log("バックアップファイルURL: " + backupSs.getUrl());
}

個人情報の取り扱いと復元手順

このスクリプトは個人情報を含む可能性のあるスプレッドシートを扱うため、以下を守ってください。

  • バックアップファイルはGoogleドライブの共有設定を適切に管理
  • 不要なバックアップは手動で削除し、ストレージ無駄遣いを防止
  • スクリプトの実行ログにURLが残るため、アクセス権限のあるユーザーに限定

復元は、バックアップファイルを開き「入力データ」シートの内容をコピーし、元のシートに貼り付けるだけです。元データは直接上書きしない設計なので、誤って消す心配はありません。


コスト削減の仮定と計算式

仮に手作業での入力チェックに1件あたり30秒かかるとします。1日あたり100件のデータ処理、時給2000円のスタッフが担当した場合、

  • 手作業時間/日 = 100件 × 0.5分 = 50分
  • 手作業コスト/日 = (50 ÷ 60) × 2000円 = 約1667円
  • 手作業コスト/月(20営業日)= 1667円 × 20日 = 約3万3千円

GAS導入によりこの作業の半分を自動化できれば、月1万5千円程度の工数削減効果が見込めます。もちろん実際は業務内容や規模で変動しますが、こうした自動化はSaaS課金なしでGoogleアカウントの利用枠内で実現可能です。


まとめ

今回紹介したGASスクリプトは、

  • 既存データを消さずに安全に入力チェックを強化
  • バッチ処理でまとめて高速に書き込み
  • 自動バックアップ&ロールバック対応
  • 追加のSaaS料金なし(Googleアカウント内利用枠で動作)

というメリットがあります。中小企業やフリーランスの皆さんにとって、品質管理の強化や業務効率化に役立つはずです。

もしもっとたくさんの便利ツールやサポートが欲しいなら、ぜひこちらのメンバーシップもチェックしてください。

GASおじラボで500ツール使い放題 →

それでは、GASおじでした!また次回お会いしましょう。