見出し画像

#50 「いつ?」「誰が?」を記録する

Facebook グループ「Google for Education 研究グループ」に寄せられていた

【アドバイスをください】
職員間で生徒とのちょっとした会話や気づいたこと(プラスの面も含めて)を共有できる仕組みを作りたいと思っています。
★現時点で考えている方法
・フォームでクラスを選択
・条件分岐で、そのクラスのセクションに飛び、名前はプルダウンで選択
・気づいたことを入力
・入力した人を選択
・スプレッドシートでクエリで日付やクラス、生徒別に見られるようにする
★こんなことできますか?
・よくあるクラス名簿のスプレッドシートで、名前の横に気づいたことと記入者を入力
例.部活の××とケンカ 気まずい(田中)
・その日が終了したら、書かれた内容が別の集計用のスプレッドシートに飛び、書き込んだスプレッドシートはリセット
・繰り返し
以上のような方法で、職員一人ひとりが隙間時間を使って1日2~3人くらい(忙しいときはできなくてもOK)書き込んでいく。
コロナ対応や日々の業務で忙殺され、職員間で生徒の情報を共有する時間が少なくなっています。また、さまざまな不安を抱えている生徒もいます。職員で情報を共有すると同時に、この取り組みを進めながら、生徒を見守る雰囲気を作っていきたいと思っています。また、集めた内容は面談や年度末の担任所見にも使えたらと考えています。
なるべく簡略化して職員の負担を増やさず、でも効果をあげるために皆さんのお知恵をください。そういうことをやりたいならこんな方法もあるよ!というアドバイスもいただきたいです。よろしくお願いいたします。

https://www.facebook.com/groups/google4education.jp/posts/3267624176782495/

という投稿へのアイディアとして、以前の記事でもネタにした onEdit() を用いた簡単なプログラムを作成してみました。
Google スプレッドシートに入力を行うと、「いつ?」「誰が?」という情報を自動的に記録します。

作成したプログラム

Google スプレッドシートに簡単な GAS のプログラムが埋め込んであります。このプログラムによって、

  • 何か入力すると、列 A に「いつ?」、列 B に「誰が?」という情報が記録されます。

  • 列 A・列 B、1行目で入力が行われても、「いつ?」「誰が?」の記録は行われません。

  • 既にこれらの情報「いつ?」「誰が?」が記録されている行で入力が行われても、これらの情報は上書きされません。 

このプログラムが行うのは、上記の内容だけです。

実行イメージ(C 列以降に入力されると、「いつ?」「誰が?」が記録される)

(1) 利用するには…

利用する Google アカウントでログインした状態で、以下のリンクにアクセスして、自身の Google ドライブにファイルをコピーします。

https://docs.google.com/spreadsheets/d/1wNwpNk80NbY07YqmVP1-IqcQx2vTRRrckZWSmgbjiyU/copy

「シンプルトリガー(Simple Triggers)」として作成してあり、他の GAS を用いたプログラムのように、実行のためのユーザー確認が必要ありません。
そのため、上記 URL にアクセスして、スプレッドシートをコピーするだけで利用できます。 ※onEdit () をトリガーとして設定しなくてもよい。

(2) 実際のプログラム

スプレッドシートに埋め込んである GAS のプログラムは、以下の通りです。30行余りのプログラムですが、半分くらいはプログラムを説明しているコメントとなっています。

"use strict";

/*****************************************************************************
 *  onEdit() という関数名であれば、「シンプルトリガー(Simple Triggers)」として、トリ
 *  ガー設定することなく、自動的に実行される。
 *  トリガー設定することで実行される「インストール可能なトリガー(Installable triggers)」
 *  と比べると、以下 URL で説明されているような制限も存在しているが、制限の範囲内であれば
 *  トリガーを設定することなく実行される。
 * 
 *    https://developers.google.com/apps-script/guides/triggers#restrictions
 * 
 *  今回のプログラムは、「シンプルトリガー」として動作する範囲内で処理を行っている。機能を
 *  追加するなどした場合には、トリガー設定して「インストール可能なトリガー」として動作させ
 *  なければならない場合があることに留意すること。
 */
function onEdit(e) {
  // 関数の引数として与えられる e については、以下 URL を参照のこと。
  // 参考:   https://developers.google.com/apps-script/guides/triggers/events
  const row = e.range.getRow();     // 編集されたセルの行数を取得
  const col = e.range.getColumn();  // 編集されたセルの列数を取得

  Logger.log(row + "," + col + "(" + e.user + ") : " + e.value);

  if ((row >= 2) && (col >= 3)) {   // 2行目以降、3列目以降であれば...
    let sheet = e.source.getActiveSheet();
    if (sheet.getRange(row, 1).getValue() == "") {
      // 1列目に何も記録されていなければ...
      sheet.getRange(row, 1).setValue(Utilities.formatDate(new Date, "JST", "yyyy/MM/dd hh:mm:ss"));
      sheet.getRange(row, 2).setValue(e.user);
    }
  }
}

(3) 注意点

  • 上記のプログラム中にもコメントとして記載していますが、機能を追加するなどした場合には、トリガー設定して「インストール可能なトリガー」として動作させなければならない場合があります。
    ※プログラムをカスタマイズして、機能追加する場合には注意!

  • 列 B には、その行に対して変更をおこなったユーザーのメールアドレスが記録されます。Google Workspace for Education の同じ組織内のユーザーで共有している分には問題なく記録されるようですが、組織外の @gmail.com  などのユーザーが入力した場合には、メールアドレスが記録できずに空欄になります。

  • 入力されたのが 2行目以降、3列目以降であれば動作するプログラムとなっているため、このスプレッドシート(ファイル)内に追加された別のシートで入力を行っても、「いつ?」「誰が?」が記録されます。

最後に

今回作成したプログラムは、冒頭の Facebook グループへの質問への対応として作成したものですが、このままの状態で利用できるものではないかもしれません。

  • 「どの列に何を入力するか?」など、どのように運用するかを検討してください。

  • もう少し複雑な判断によって「いつ?」「誰が?」以外の情報を記録する場合には、GAS のプログラムを変更してください。 ※その場合には、「インストール可能なトリガー」として動作させなければならない場合に注意。

といった点にも注意してください。
簡単なプログラムですが、何かの役に立てば幸いです。

この記事が気に入ったらサポートをしてみませんか?