【第3部】演題受付時に自動的に区分分け有の演題受付番号を付与する方法

仕事

学会の演題受付といえば、専用のオンラインシステムやメールでの受付が一般的かもしれません。しかし、小規模な研究会や予算が限られた学会では、Googleフォームを活用するという方法も選択肢のひとつです。

無料で使え、入力内容はそのままスプレッドシートに記録され、共有・管理も簡単。さらに、**Google Apps Script(GAS)**を使えば、手動で行っていた煩雑な作業を自動化することも可能です。
👉 自作演題登録システムについて:ご興味のある方は、まずはこちらをご覧ください。

受け付けた演題を管理するために、仮で番号付けを行いたいはずです。
そしてそれは番号自体は全体で通し番号を付けて、それがどの区分の演題に投稿されたものなのか、一目で区別を付けたいと思うのではないかと思います。(場合によっては、区分ごとで通し番号を付けたいこともあるかもしれませんが・・・)

そこで今回は、演題受付番号として、通し番号+区分ごとの接尾辞を自動で付番する方法をご紹介します。


今回やりたいこと:演題受付番号の自動付番+区分ごとの接尾辞

演題受付時に 0001、0002…のように通し番号を自動で振る

  • 発表区分に応じて、末尾を「Oral」「Poster」「YIA」などで分類
  • 一度付けた番号が変更されないようにしつつ、区分だけが変更された場合には末尾のみ更新
    *投稿者によっては、もともとはポスター発表にしようかと考えていたが、やはり口頭発表に変更しようと考えた場合があるため。
  • 今後の処理(PDF出力やメール送信)のために、「送信ステータス」や「送信時刻」も記録


自動付番スクリプト(初心者向け解説つき)

Google Apps Script を使って、実現させましょう

以下は、演題受付番号(0001Oral、0002YIAなど)を自動で振るスクリプトです。どの部分で何をしているのかをコメントで丁寧に説明しています。

👉 Google Apps Script(GAS)の基本:スクリプトをどこに入力すればよいのだったか・・・という方はこちらの記事をまずご覧ください。

function assignEntryNumbersAndInitStatus() {
// スプレッドシートの「フォームの回答 1」シートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('フォームの回答 1');
const data = sheet.getDataRange().getValues(); // 全データを取得(2次元配列)
const header = data[0]; // 1行目(列の見出し)

// 必要な列のインデックス(何列目か)を探す
const entryCol = header.indexOf("演題受付番号"); // 演題受付番号の列
const categoryCol = header.findIndex(col => col.startsWith("発表区分")); // 発表区分
const statusCol = header.indexOf("送信ステータス"); // 後で使う、メール送信状況
const timeSentCol = header.indexOf("送信時刻"); // 後で使う、送信した日時

// 必要な列が見つからない場合、エラーを出して止める
if ([entryCol, categoryCol, statusCol, timeSentCol].includes(-1)) {
SpreadsheetApp.getUi().alert("必要な列が見つかりません。列名をご確認ください。");
return;
}

// 発表区分に応じた記号(末尾)を定義(部分一致で判定)
const categoryMap = {
"一般演題(口頭)": "Oral",
"一般演題(ポスター)": "Poster",
"YIA": "YIA"
};

// すでに登録されている最大の通し番号を調べる
let maxNumber = 0;
for (let i = 1; i < data.length; i++) {
const current = data[i][entryCol]; // 例:"0003Poster"
if (current && current.startsWith('0')) {
const num = parseInt(current.slice(0, 4)); // 先頭4桁(0003)を数値として取り出す
if (!isNaN(num)) maxNumber = Math.max(maxNumber, num);
}
}

// データ行を1つずつ処理
for (let i = 1; i < data.length; i++) {
const currentEntry = data[i][entryCol]; // 現在の演題受付番号
const category = data[i][categoryCol] || ""; // 発表区分の内容

// 区分に応じた末尾(OralやYIA)を取得。見つからなければ"UNK"
let suffix = "UNK";
for (let key in categoryMap) {
if (category.includes(key)) {
suffix = categoryMap[key];
break;
}
}

// ===== 新規の登録:まだ番号が付いていない行 =====
if (!currentEntry) {
maxNumber++;
const newEntry = String(maxNumber).padStart(4, '0') + suffix; // 0001YIA などを生成
sheet.getRange(i + 1, entryCol + 1).setValue(newEntry); // 番号をセット
sheet.getRange(i + 1, statusCol + 1).setValue("未送信"); // ステータス初期化
sheet.getRange(i + 1, timeSentCol + 1).setValue(""); // 送信時刻は空に
}

// ===== 登録済みの行で、区分だけ変更された場合 =====
if (currentEntry) {
const prefix = currentEntry.slice(0, 4); // 数字部分を取り出す(0001)
const newEntry = prefix + suffix; // 新しい形式を組み立て(0001Oral など)
if (currentEntry !== newEntry) {
sheet.getRange(i + 1, entryCol + 1).setValue(newEntry); // 変更された場合だけ上書き
}
}
}
}

ポイント解説

  • SpreadsheetApp.getActiveSpreadsheet():現在開いているスプレッドシートを取得します
  • header.indexOf(...)findIndex(...):列名から、何列目かを探します(0から始まる数)
  • maxNumber:すでに付与された番号のうち、一番大きいものを探しています
  • .padStart(4, '0'):番号を4桁に揃えるため、足りない桁に「0」をつけます(例:1 → 0001)
  • "未送信"や送信時刻は、今後メールを送信する際に使うための情報です
  • このスクリプトを使えば、
  • 入力されるたびに、一意の演題番号が自動的に割り振られ、
  • 発表区分に応じた文字(紹介コードではOral, Poster, YIA)を末尾につけられ、
  • 今後の作業(PDF出力やメール)に向けて、状態を記録しておく準備ができます。


「送信ステータス」「送信時刻」は何に使うの?

このスクリプトの中には、**「送信ステータス」や「送信時刻」**を記録するコードも含まれています。

これは後のステップ(自動メール送信する処理)で、

  • すでにメールを送信したかどうかを判定
  • フォームの内容が更新されたときだけ再送信

といった制御をするための準備です。もしもメールの自動送信をお考えの方は、将来を見据えた設計として、最初の時点でステータス管理の列を作っておくことをおすすめします


設定手順まとめ

  1. Googleフォームを作成し、演題登録を受け付ける
  2. フォームの回答先スプレッドシートを開く
  3. 拡張機能 → Apps Script を開いて、上記スクリプトを貼り付け・保存
  4. 手動でスクリプトを一度「実行」して動作を確認
  5. 必要に応じて「トリガー(フォーム送信時)」を設定して自動化
    (もし、自動抄録作成・自動メール送信等、別の記事で紹介していることも行う場合は、トリガー設定は今は不要です。後程、複数工程をまとめてトリガー設定します。)


おわりに

Googleフォーム + スプレッドシート + Apps Script を使えば、ちょっとした工夫で演題受付業務が大幅に効率化されます。

特に少人数で運営する学会や、学内イベントなどでは、こうした方法が大きな助けになります。

次に読むべき記事はこちら

Googleフォーム×Apps Scriptで演題登録システムを作るシリーズ

次回は、登録された演題情報から「抄録PDFを自動作成」する方法をご紹介します!
👉 抄録を整形して出力する方法:GASを使用して、Google formに入力された内容を抄録形式に自動的に整形する方法を説明しています。

ご覧になりたい記事が決まっているなら・・・
👉 自作演題登録システムについて:Google formを使用して、演題登録システムを自作する方法の全体像を紹介するページです。
👉 Googleフォーム設計と注意点:Google formの作り方、演題登録システム構築に向けたフォームの設計と注意点を説明しています。
👉 Google Apps Script(GAS)の基本:Google Apps Scriptとは何か、どんなことができるのかを、通し番号を付ける例で説明しています。
👉 演題番号を自動で付ける方法:GASを使用して、演題番号を通し番号+演題振り分け記号を自動でつける方法を説明しています。(本ページ)

👉 抄録を整形して出力する方法:GASを使用して、Google formに入力された内容を抄録形式に自動的に整形する方法を説明しています。
👉 投稿者に抄録PDFをメール送付する方法:GASを使用して、自動付与した演題番号と抄録形式のPDFをメールで自動的連絡する方法を説明しています。
👉 フォーム送信時にすべてを自動化する方法:GASのトリガーを使用して、抄録を添付してフォーム入力者に自動応答メールを送信する方法を説明しています。
👉 複数フォームの統合方法:日本語フォームと英語フォーム等のように独立したフォームからの入力を1つのスプレッドシートに統合する方法を説明しています。
👉 受付フォーム構築例:事前参加登録をGoogle formで構築する注意点を説明しています。
👉 フォームリセット方法:Google Formの入力内容をリセットし、受付を1からやり直す方法(フォームの再利用も可能)を説明しています。

コメント

タイトルとURLをコピーしました