Googleフォームの回答毎に、ユニークな連番を付与したいというご要望が割とあります。その連番をどのように使用されるかはケースによって異なりますが、回答一覧シートの上から順に手動で番号を振るのは億劫だったり、数式で自動付与しているとソートしたり間の行を削除した際にずれてしまったりします。そういったことへの対策として、採番管理用シートで番号を管理するようにして、新しい回答が送信される度に自動付与するという仕組みを構築することが多いです。

今回は、そのような処理を実行する過去何度か構築したGAS(Google Apps Script)を汎用的にしたものを公開いたします。

私が作成したサンプルコードの主な仕様は以下の通りです。

<サンプルコードの仕様>

・Googleフォームとリンクするスプレッドシート内に予め「採番管理」シートを用意しておく
・「採番管理」シートのA1セルに、基準とする値を入力しておく(例:N00000、N-00000000)
・最新の回答が送信された際に回答シートの最終行のK列に最新の連番が挿入される

サンプルコードをカスタマイズすればかなり便利にご利用いただけるかと思いますので、ぜひ、ご自由にお使いください!

※ご質問にはお答えできませんので予めご承知おきくださいませ。

スプレッドシートのシート一覧イメージ

シート一覧画像

コード

function automaticIndexedCopy() {
  const answerSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("回答シートの名前");
  const serialNumSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("採番管理");

  const answerSheetLastRow = answerSheet.getLastRow();

  // 採番管理シートの最新の番号を取得
  const serialNumSheetLastRow = serialNumSheet.getLastRow();
  const currentNum = serialNumSheet.getRange(serialNumSheetLastRow, 1).getValue();
  let newSerialNum = null;

  // 正規表現でアルファベット部分と数字部分を分離
  const match = currentNum.match(/^([A-Za-z-_]+)(\d+)$/);

  if (match) {
    const prefix = match[1];
    const numericPart = parseInt(match[2], 10);

    const newNum = numericPart + 1;
    newSerialNum = prefix + newNum.toString().padStart(match[2].length, "0");
  }

  // 最新の番号を採番管理シートにセット
  serialNumSheet.getRange(serialNumSheetLastRow + 1, 1).setValue(newSerialNum);

  // 最新の番号を回答シートの最新回答のK列にセット
  answerSheet.getRange("K" + answerSheetLastRow).setValue(newSerialNum);
}

トリガー設定

対象関数:automaticIndexedCopy

「スプレッドシートから」かつ「フォーム送信時」で設定してください。