出欠回答の未入力と表記ゆれを集計前に発見|GASで回答行をdry-run監査

出欠回答の未入力と表記ゆれを集計前に発見|GASで回答行をdry-run監査

ツールおじ|GoogleアカウントをAIエージェント化

ツールおじ|GoogleアカウントをAIエージェント化

出欠表を集計しようとしたら、名前が空欄、回答が「参加」「出席」「○」に分かれていて数が合わない。そんな集計前の困りごとを、シートを書き換えずに発見する無料GAS例です。この記事では出欠の事実入力だけを検査し、勤怠・給与・労務上の判断は行いません。

先に知っておきたいこと

  • `DRY_RUN = true` を固定し、セルの更新・削除・通知を行いません。
  • A列を名前、B列を出欠回答として、2行目から最大500行を確認します。
  • 許可する回答は「参加」「欠席」「未定」の3種類です。
  • 氏名や回答内容をログへ出さず、行番号とエラー種別だけを記録します。

準備するシート

  • シート名: `出欠回答`
  • A列: 名前
  • B列: 回答(参加・欠席・未定)
  • 1行目は見出し、2行目以降に検証用データを置きます。

コピーして使える最小コード

const DRY_RUN = true;
const SHEET_NAME = '出欠回答';
const MAX_ROWS = 500;
const ALLOWED_STATUS = ['参加', '欠席', '未定'];

function auditAttendanceInputFree() {
  if (DRY_RUN !== true) throw new Error('安全のためDRY_RUN=trueで実行してください');
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  if (!sheet) throw new Error('シート「' + SHEET_NAME + '」が見つかりません');

  const lastRow = sheet.getLastRow();
  if (lastRow < 2) throw new Error('確認する回答行がありません');
  const rowCount = lastRow - 1;
  if (rowCount > MAX_ROWS) throw new Error('500行を超えています。範囲を分けてください');

  const values = sheet.getRange(2, 1, rowCount, 2).getDisplayValues();
  const issues = [];
  const counts = { '参加': 0, '欠席': 0, '未定': 0 };

  values.forEach((row, index) => {
    const rowNumber = index + 2;
    const name = String(row[0] || '').trim();
    const status = String(row[1] || '').trim();
    if (!name) issues.push({ row: rowNumber, type: '名前未入力' });
    if (!status) {
      issues.push({ row: rowNumber, type: '回答未入力' });
    } else if (!ALLOWED_STATUS.includes(status)) {
      issues.push({ row: rowNumber, type: '回答表記ゆれ' });
    } else {
      counts[status] += 1;
    }
  });

  console.log(JSON.stringify({ dryRun: DRY_RUN, checkedRows: rowCount, counts, issues: issues.slice(0, 50) }));
  if (issues.length > 50) console.log('指摘が50件を超えたため、先頭50件だけ表示しました');
}

実行手順

1. 検証用スプレッドシートへ「出欠回答」シートを作ります。

2. A列とB列へ少量のサンプルを入力します。

3. Apps Scriptへコードを貼り、`auditAttendanceInputFree` を実行します。

4. 実行ログで件数、回答別集計、行番号と指摘種別を確認します。

5. 修正が必要な行は、人が元回答を確認してからシート上で直します。

失敗しやすい点と停止条件

  • シートなし、回答行なし、500行超では停止します。
  • 「出席」「○」などを勝手に「参加」へ変換しません。許可値は運用に合わせて明示的に変更してください。
  • 同姓同名の判定や本人確認は行いません。
  • 個人情報保護、勤怠、給与、労務上の判断には使わず、必要に応じて担当者や専門家へ確認してください。
  • ログには氏名と回答本文を残しません。

公開前チェックリスト

  • 元シートを更新・削除していない
  • 自動メールや外部送信を行っていない
  • ログに氏名を出していない
  • 500行の停止条件がある
  • 少量のコピー環境で確認した

まとめ

出欠集計は、合計を出す前に未入力と表記ゆれを分けて確認すると、数え直しを減らしやすくなります。まずは元データを変えないdry-runで指摘行だけを確認し、修正は回答内容を確かめた人が行ってください。

個人クリエイター公開準備チェックGAS Proを見る

GasおじのTips商品一覧を見る

※学習・検証用の例です。実データへ適用する前にコピー環境で確認してください。Google公式・Google公認の商品ではありません。


あなたも記事の投稿・販売を
始めてみませんか?

Tipsなら簡単に記事を販売できます!
登録無料で始められます!

Tipsなら、無料ですぐに記事の販売をはじめることができます Tipsの詳細はこちら
 

この記事のライター

ツールおじ|GoogleアカウントをAIエージェント化

おう、Gasおじだ。 AIツールとSaaSに散々突っ込んで遠回りした結果、最後に強かったのは「今あるGoogleアカウント」だった。 今ではAIエージェントであらゆるタスクを自動化して無双してるぞ。 GAS、スプレッドシート、フォーム、Gmail、AIエージェントを組み合わせれば、個人でも小さな会社でも、手作業だらけの業務はかなり自動化できる。 ここでは机上のAI論じゃなく、現場で動くテンプレ、コード、手順だけを置いていくぞ。 高いツールを増やす前に、まずお前さんのGoogleアカウントを仕事するエージェントに変えようじゃないか。

このライターが書いた他の記事

  • Gmailの定型連絡を「送信せず」まとめて下書き化する|Gmail下書きテンプレGAS Pro

    ¥2,980
    1 %獲得
    (29 円相当)
  • あとで見るURLを二重登録しない|GASで読書・動画ウォッチリストをdry-run監査

  • カレンダーの二重登録を作成前に発見|GASで予定候補をdry-run監査

関連のおすすめ記事

  • Gmailの定型連絡を「送信せず」まとめて下書き化する|Gmail下書きテンプレGAS Pro

    ¥2,980
    1 %獲得
    (29 円相当)
    ツールおじ|GoogleアカウントをAIエージェント化

    ツールおじ|GoogleアカウントをAIエージェント化

  • 【Python】 Con-Que 【データベース接続】

    ¥3,000
    1 %獲得
    (30 円相当)
    GoGorilla

    GoGorilla

  • USBメモリで持ち運べるLinux Mint 22.1と永続的な書き込み領域の作成法【Rufus だけで作成する方法を初心者向けに徹底解説】

    ¥500
    1 %獲得
    (5 円相当)
    SmartSenior

    SmartSenior