入力ミスを見つける処理は、間違った値を自動で直す前に、どの行の何が条件と違うかを示すところから作ります。空欄を0へ直したり、知らない状態名を「未処理」へ置き換えたりすると、入力した人の意図を消す場合があります。
例では受付ID、数量、状態の3列を点検します。数量は0以上の整数、状態は「未処理・対応中・完了」に限定する設計です。これは練習用の条件で、すべての業務に同じ規則を当てはめるものではありません。
正常とする値を決める
先に、必須項目、許可する値、重複の扱いを表にします。受付IDの先頭ゼロを残す、数量0は受け付ける、空欄は不足として止める、という違いを明記します。
| 項目 | この例の条件 | 不備がある場合 |
|---|---|---|
| 受付ID | 空欄不可、同じ表で重複不可 | 入力元を確認 |
| 数量 | 0以上の整数 | 単位や未入力を確認 |
| 状態 | 未処理・対応中・完了 | 表記と運用ルールを確認 |
数量が文字の「3」でもよいかは、読み取り方法と入力のルールで変わります。この例はgetValuesで取得した数値を想定し、文字列は自動変換せず不備にします。文字列の数値を受け付けたいなら、その変換規則を別に用意します。
配列を検査する関数
GoogleのRangeリファレンスでは、getValuesが二次元配列を返し、空のセルは空文字列になると説明されています。次の関数は見出しを除いた配列を点検する例です。GASから実際の表を読んだり、値を更新したりはしていません。
function inspectInputRows(rows) {
const errors = [];
const seen = new Set();
const states = ['未処理', '対応中', '完了'];
rows.forEach(function (row, index) {
const line = index + 2;
const id = String(row[0] === undefined ? '' : row[0]).trim();
if (!id || seen.has(id)) errors.push([line, '受付ID', '空欄か重複']);
if (id) seen.add(id);
if (!Number.isSafeInteger(row[1]) || row[1] < 0) {
errors.push([line, '数量', '0以上の整数ではない']);
}
if (!states.includes(row[2])) {
errors.push([line, '状態', '許可した値ではない']);
}
});
return errors;
}
行番号は、元のシートで1行目が見出しという想定です。違う位置から読み取るなら、その開始行に合わせて番号を直します。エラー一覧に元の値も残す場合は、個人情報などを別の共有先へ複製しないかを確認してください。
正常例と異常例の照合
「A001・0・未処理」は正常例です。「A001が2行ある」「数量が空欄」「状態が対応済み」のような例も用意し、想定した項目だけが報告されるかを見ます。0を空欄と同じものとして扱わないことも確認します。
検査結果が0件でも、業務上の内容まで正しいとは限りません。数量の桁を1つ間違えても、0以上の整数という条件には合います。注文書と照合する必要がある値は、入力形式の検査とは分けます。
シートへ組み込むタイミング
最初は手動で全体を点検し、確認表へ結果を出す運用にします。入力規則で値を絞る方法と、処理の直前に配列を検査する方法を組み合わせると、どこで不備を防ぐかが分かります。
編集をきっかけに検査する場合は、シンプルトリガーの制限を確認してください。スクリプトによるセル更新など、手入力と同じようには発火しない操作があります。外部から取り込んだデータも検査したいなら、取り込み処理の直後にも確認を置きます。
不備がある行を通知や集計へ流すか、全体を止めるかは業務で決めます。誤りを見つける処理と、値を書き換える処理を分ければ、入力者へ確認してから修正できます。
欠損や型の点検は取得データの欠損検知、GASの値の読み取りはGAS入門も参考になります。
