学会の演題受付といえば、専用のオンラインシステムやメールでの受付が一般的かもしれません。しかし、小規模な研究会や予算が限られた学会では、Googleフォームを活用するという方法も選択肢のひとつです。
無料で使え、入力内容はそのままスプレッドシートに記録され、共有・管理も簡単。さらに、**Google Apps Script(GAS)**を使えば、手動で行っていた煩雑な作業を自動化することも可能です。
今回やりたいこと:演題受付番号の自動付番+区分ごとの接尾辞
Googleフォームを使った演題登録で、こんなふうにできたら便利だと思いませんか?
- 演題受付時に 0001、0002…のように通し番号を自動で振る
- 発表区分に応じて、末尾を「GO」「GP」「YIA」などで分類
- 一度付けた番号が変更されないようにしつつ、区分だけが変更された場合には末尾のみ更新
- 今後の処理(PDF出力やメール送信)のために、「送信ステータス」や「送信時刻」も記録
実はこれ、Google Apps Script を使えば簡単に実現できます。
自動付番スクリプト(初心者向け解説つき)
以下は、演題受付番号(0001GO、0002YIAなど)を自動で振るスクリプトです。どの部分で何をしているのかをコメントで丁寧に説明しています。
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]; // 例:"0003GP"
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] || ""; // 発表区分の内容
// 区分に応じた末尾(GOや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; // 新しい形式を組み立て(0001GO など)
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出力やメール)に向けて、状態を記録しておく準備ができます。
「送信ステータス」「送信時刻」は何に使うの?
このスクリプトの中には、**「送信ステータス」や「送信時刻」**を記録するコードも含まれています。
これは後のステップ(たとえば、自動メール送信する処理)で、
- すでにメールを送信したかどうかを判定
- フォームの内容が更新されたときだけ再送信
といった制御をするための準備です。将来を見据えた設計として、最初の時点でステータス管理の列を作っておくことをおすすめします。
設定手順まとめ
- Googleフォームを作成し、演題登録を受け付ける
- フォームの回答先スプレッドシートを開く
拡張機能 → Apps Script
を開いて、上記スクリプトを貼り付け・保存- 手動でスクリプトを一度「実行」して動作を確認
- 必要に応じて「トリガー(フォーム送信時)」を設定して自動化
おわりに
Googleフォーム + スプレッドシート + Apps Script を使えば、ちょっとした工夫で演題受付業務が大幅に効率化されます。
特に少人数で運営する学会や、学内イベントなどでは、こうした方法が大きな助けになります。
次回は、登録された演題情報から「抄録PDFを自動作成」する方法をご紹介します!
コメント