Googleフォームの名簿入力を自動化!学校業務がグッと楽に!

業務改善

はじめに

年度初め、ICT担当にとって恒例の「名簿更新ラッシュ」について解説します。

保健、欠席連絡、端末管理…。

先生たちの日々の業務を楽にするために先生がGoogleフォームで児童の名前をプルダウン選択式にして活用していますが、「クラス替え」のたびに全フォームの名簿を手動で更新するのは、まさに地味だけど骨の折れる作業。

この記事では、「Googleフォームの名前リストをスプレッドシートから一括で更新できる方法」を紹介し、あなたの作業時間を大幅に短縮することを目指します。

「毎年、なんでこんなに面倒なんだろう…」と感じているICT担当のあなたにこそ、読んでほしい内容です。

最初にしていた最も非効率な方法

最初は、各フォームを開いて、名前の選択肢を手入力で更新していました。今思うと名簿を見ながらすべて打ち込んでいたなんて信じられません。

フォームの数が10個を超えると、もう気が遠くなります。

しかも元にあるホームの名簿を全て削除することから始まるのでその手間は入力以上の面倒感がありました。

「このフォーム内で質問の内容をコピーできればいいのだけど」と思いますが、Googleホームにはその機能が。さらに更新し忘れがあると、「〇〇先生のフォームだけ去年の名簿です」と指摘が入って焦ることも…。

実はスプシからコピペでできることを知った

Googleワークスペースの活用方法についてYouTubeをあさってたら、Googleホームにスプレッドシートの情報をコピペすることができると言うことがわかりました。

「名簿はスプレッドシートからコピペすればいいのでは?」と気づき、少し効率は上がりました。

でも、それでもやっぱり時間はかかる。それに前のクラスの人数より今年の人数が少ないときにははみ出た部分を忘れずに削る一手間が必要でした。

名前リストをコピペ → フォームを保存 → 次のフォームへ…の繰り返し。たくさんやってるとどれがどれだかわからなくなって貼り付けミスがあったりもしました。

たくさん学級があるとコピペするのも面倒

特に、全校児童分の名簿を管理していると、各学年・各クラスの名簿を毎年切り替えるだけで一苦労。

転出入もあれば、修正対応も発生します。

「これ、繰り返し作業だし、Googleのサービス動作だから絶対にスクリプトでどうにかできるはず…」と思ったのが、転機でした。

ここでChatGPTの出番です!

1つのGoogleフォームで運用している名簿を更新する方法

例えば、欠席連絡フォームを1つだけ運用しているケース。

この場合は、スプレッドシートの名簿を更新し、それをGoogle Apps Scriptでフォームに反映させればOKです。

この場合のサンプルコードはこちら

function updateForm() {
  var formId = 'GoogleフォームのIDをここに貼り付け'; // GoogleフォームのID
  var form = FormApp.openById(formId);
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('児童名簿'); // 名簿があるシート
  
  // 各クラスとそれに対応するスプレッドシートの列のマッピング
  var classToColumn = {
    '1年1組': 'A2:A',
    '1年2組': 'B2:B',
    '2年1組': 'C2:C',
    '2年2組': 'D2:D',
    '3年1組': 'E2:E',
    '3年2組': 'F2:F',
    '4年1組': 'G2:G',
    '4年2組': 'H2:H',
    '5年1組': 'I2:I',
    '5年2組': 'J2:J',
    '6年1組': 'K2:K',
    '6年2組': 'L2:L'
  };

  // 各クラスの処理をループで実行
  Object.keys(classToColumn).forEach(function(className) {
    var columnRange = classToColumn[className];
    var names = sheet.getRange(columnRange + sheet.getLastRow()).getValues();
    var choices = names.filter(function(name) { return name[0] !== ''; }).map(function(name) { return name[0]; });

    updateClassQuestions(form, className, choices);
  });
}

function updateClassQuestions(form, className, choices) {
  var items = form.getItems();
  for (var i = 0; i < items.length; i++) {
    var item = items[i];
    // 質問タイトルがクラス名を含むものを探す
    if (item.getTitle().includes(className)) {
      // 質問項目のタイプに応じて適切な操作を選択
      if (item.getType() === FormApp.ItemType.LIST) {
        var listItem = item.asListItem(); // ドロップダウンリストとして扱う
        listItem.setChoiceValues(choices); // 新しい選択肢をセット
      } else if (item.getType() === FormApp.ItemType.MULTIPLE_CHOICE) {
        var multipleChoiceItem = item.asMultipleChoiceItem(); // 複数選択タイプとして扱う
        multipleChoiceItem.setChoiceValues(choices); // 新しい選択肢をセット
      }
      // 同じクラス名を持つ質問が複数ある場合は、breakをコメントアウトまたは削除する
      // break; // 一致する最初の質問を更新したらループを抜ける
    }
  }
}このスクリプトを説明してください

名簿を更新 → スクリプトを実行、で完了。

これはかなりの時短になりました。

複数のフォームで運用している名簿更新する方法

次のステップは「複数フォーム」の一括更新。

校内アンケート、管理台帳作成など、クラスごとに別々のフォームを使っている場合、以下のようなスクリプトで一気に更新できます。

名簿列をGoogleスプレッドシートで一元管理しておけば、年度始めの更新も「ボタン一発」。

転入生の追加も「1人分の名前を追加 → 実行」ですぐ反映されます。

function updateAllClassForms() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('児童名簿');

  // 各クラスのフォームIDと名簿列のマッピング
  var classData = {
    '1年1組': { formId: 'フォームIDをここに入力', range: 'A2:A' },
    '1年2組': { formId: 'フォームIDをここに入力', range: 'B2:B' },
    '2年1組': { formId: 'フォームIDをここに入力', range: 'C2:C' },
    '2年2組': { formId: 'フォームIDをここに入力', range: 'D2:D' },
    '3年1組': { formId: 'フォームIDをここに入力', range: 'E2:E' },
    '3年2組': { formId: 'フォームIDをここに入力', range: 'F2:F' },
    '4年1組': { formId: 'フォームIDをここに入力', range: 'G2:G' },
    '4年2組': { formId: 'フォームIDをここに入力', range: 'H2:H' },
    '5年1組': { formId: 'フォームIDをここに入力', range: 'I2:I' },
    '5年2組': { formId: 'フォームIDをここに入力', range: 'J2:J' },
    '6年1組': { formId: 'フォームIDをここに入力', range: 'K2:K' },
    '6年2組': { formId: 'フォームIDをここに入力', range: 'L2:L' }
  };

  for (var className in classData) {
    var formId = classData[className].formId;
    var rangeRef = classData[className].range;

    var column = rangeRef.split(':')[0].replace(/[0-9]/g, '');
    var lastRow = sheet.getLastRow();
    var names = sheet.getRange(column + '2:' + column + lastRow).getValues();
    var choices = names
      .filter(function(name) { return name[0] !== ''; })
      .map(function(name) { return name[0]; });

    var form = FormApp.openById(formId);
    updateNameQuestion(form, choices); // 「名前」という質問を更新
  }
}

function updateNameQuestion(form, choices) {
  var items = form.getItems();
  for (var i = 0; i < items.length; i++) {
    var item = items[i];
    if (item.getTitle() === '名前') {
      if (item.getType() === FormApp.ItemType.LIST) {
        item.asListItem().setChoiceValues(choices);
      } else if (item.getType() === FormApp.ItemType.MULTIPLE_CHOICE) {
        item.asMultipleChoiceItem().setChoiceValues(choices);
      }
      break; // 「名前」の質問は1つだけを想定
    }
  }
}

スクリプト実行スイッチの作り方

スクリプトが完成したらそれを実行するためのスイッチを作成しましょう。今回は図形を挿入してその図形をクリックすることでプログラムが実行される方法を説明します。

Googleスプレッドシートで「図形(描画)」や「画像」などにスクリプト(GAS: Google Apps Script)を割り当てて、クリックで実行できるようにする方法を説明します。

■ スクリプトを図形や画像に割り当てる方法

① まずスクリプトを書く

  1. メニューバーから「拡張機能」→「Apps Script」を開きます。
  2. エディタで以下のように関数を作成したスクリプトのfunction 〇〇〇〇の部分をコピーします。

② スプレッドシートに図形または画像を挿入

  1. メニューバーから「挿入」→「図形描画」または「画像を挿入」→「セルの上に画像」を選択。
  2. 図形や画像を配置して、必要なら「編集」でテキストも追加。

③ 図形・画像にスクリプトを割り当てる

  1. スプレッドシート上でその図形または画像をクリック。
  2. 右上に出てくる「︙(縦3点)」メニューをクリック。
  3. 「スクリプトを割り当て」を選択。
  4. 先ほどコピーした実行したい関数を貼り付け。
  5. OKをクリック。

■ 注意点

  • スクリプトを使うには、最初の実行時に権限の許可が必要です。
  • Google Apps Script を初めて実行する際には、**権限の許可(認証)**が必要です。以下の手順で行います。

    ■ スクリプトに権限を付与する手順

    ① スクリプトエディタで関数を実行

    1. スプレッドシートで
       「拡張機能」→「Apps Script」 を開く
    2. 実行したい関数名(例:sayHello)を選び、
       ▶(実行)ボタンをクリック

    ② 権限確認のウィンドウが表示される

    • 「このアプリは確認されていません」などと表示される場合もあります。
    • 「続行」や「詳細」→「○○に移動(安全ではないページ)」をクリック。

    ③ Googleアカウントでログイン

    • スクリプトを動かすアカウントを選択。

    ④ アクセス権限を確認して「許可」

    • 「Google スプレッドシートの編集を許可しますか?」などの内容が表示されるので、
    • 内容を確認して「許可」ボタンを押します。

    ⑤ 初回実行後、再実行すれば動作OK

    • 初回認証後は、図形をクリックするだけでスクリプトが実行されます。

    必要なら、この一連の流れも画像付きマニュアルにできます。希望があればお知らせください。

    終わりに

    地味だけど、学校全体を支える「名簿更新」

    名簿を整えておくだけで、欠席者リストやタブレット端末の利用者名を毎回入力する手間が減り、学校全体の業務がぐっとスムーズになります。

    とはいえ、ICT担当が毎年この作業に多くの時間を取られてしまっては、本当にやりたいICT推進の活動まで手が回りません。多くの学校では、ICT担当が担任を持ちながら兼任していることも多いはずです。

    だからこそ、スクリプトを使って自動化の仕組みを作ることが鍵になります。毎年やってくる「名簿の季節」を、ストレスからちょっとした快感に変えてしまいましょう。

    そして何よりのモチベーションは、まわりの先生からの「これ、助かるよ!」の一言です。

    これは自分のためというより、まわりのための作業。ですが、「情けは人のためならず」。

    こうした貢献が、めぐりめぐって自分がピンチのときに助けてもらえる。そんな好循環を作る力にもなります。

    業務効率化は「知っているか・知らないか」「やるか・やらないか」だけ

    この記事で紹介したスクリプトや仕組みは、難しいものではありません。

    一度試してみるだけで、その効果を実感できるはずです。

    「これは使える!」と思ったら、ぜひ他校の先生やご友人にもシェアしてください。

    私たち教師が、本当に教師の仕事に専念できるその日のために。

    必要であれば、このパートに合うイメージ画像(感謝されるシーンや、スムーズに業務が回っているイメージなど)もご用意します。ご希望があればお知らせください。 

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