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

こんにちは、GASおじです。今日は中小企業の経営者やフリーランスの皆さん向けに、Googleスプレッドシートの入力チェックをGoogle Apps Script(以下GAS)で強化する方法を解説します。入力ミスが多いと業務効率は落ちるし、品質管理にも悪影響。そこで、GASを使って「既存データを壊さずに」「バッチ処理でまとめて」「バックアップやロールバックもできる」堅牢な仕組みを作りましょう。
なぜ入力チェック強化が必要なのか?
スプレッドシートは手軽に使えて便利ですが、入力ミスや不正なデータが混入すると困りますよね。たとえば、数値の桁数間違いや、日付フォーマットの揺れ、空欄データの混入など。
GASを使えば、入力時のバリデーションを自動化し、ミスを未然に防止できます。また、誤入力があっても元データを消さず、新規シートやファイルに結果を書き出すので、データの安全性が確保されます。加えて、処理前にバックアップを作成し、必要ならロールバックも可能。SaaSの追加課金は不要で、Googleアカウントの利用枠内で動きます。ただしApps Scriptの実行制限はあるので大量データは注意が必要です。
初期設定と必要権限
まずはGoogleスプレッドシートとGASの初期設定です。
- スプレッドシートを開き、メニューの「拡張機能」→「Apps Script」を選択
- 新規プロジェクトに以下のスクリプトを貼り付けます
- 初回実行時にGoogleアカウントの認証を求められるので承認してください
- スクリプトはスプレッドシートのデータへの読み書き権限が必要です
また「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おじでした!また次回お会いしましょう。