Googleスプレッドシートにおける教育現場での活用は様々あります。
そのなかで、今回はスプレッドシートの編集履歴を確認できる機能に着目していきます。
使い道としては、生徒が期限内にしっかりと記入しているのか確認するために使用するなどが考えられます。
しかし、生徒数が多いとそうした回数も多くなるため、時間がもったいないと感じてしまうことがあると思います。
そこで今回はある工夫を取り入れることで、解消を試みます!
完成図としては下の画像になります。
記入をしたら
記入日がすぐに反映される!
こうした設定のやり方を今回はご紹介します。
今回の記事では、以下の内容をご紹介します。
元塾講師6年 / 2023年度 第1志望校合格率 "71.4%"達成!(難関校合格あり)
高校数学・情報の教員免許取得!(元 科目等履修生[2年間])
文系で大学の情報学部に入学 / ITパスポート・基本技術者試験に合格!
Google スプレッドシートとGASで作業の効率化を上げていこう!
さて、課題の記入時刻を表示・更新させる方法には、Googleスプレッドシート(以下、スプレッドシートと省略)とGASについて理解する必要があります。
ここから解説していきます!
Google スプレッドシートとは
スプレッドシートは、Googleが提供しているクラウドベースでウェブブラウザからアクセスできる表計算ツールです。
この機能の概要は、以下の通りです。
エクセルは高度な分析ができる点が優れていますが、ライセンス料を払う必要があるので、コスト面を考えている人はスプレッドシートがオススメです!
GASとは
Google Apps Script(通称GAS)は、クラウドのプラットフォーム上で実行できるGoogleが提供しているサービスです。
この機能の概要は、以下の通りです。
- Googleアカウントがあれば、誰でも無料で利用可能
- GmailやGoogleカレンダー、スプレッドシートなど、Googleのさまざまなアプリに利用可能
- 自動化、アプリ間の連携など業務の効率化を実現
- JavaScriptを踏襲しているため、WEBエンジニアには学習ハードルが低い
- Googleアプリと外部アプリとの連携が可能
拡張機能なので、使えるように設定をする必要があります。一方で、設定方法も意外と簡単なので、すぐに試すことができると思います。
スプレッドシートで生徒の課題の記入時刻を表示・更新させる方法
目的
スプレッドシートには、編集者の編集履歴を確認する機能があります。以下の画面の赤丸をクリックすると、編集ログが出てきます。
この画面が開けたらOK
右側のリストが誰がいつ編集したのかが記載されています。プライバシー保護のため、編集者名を白く塗りつぶしています。
緑色に表示されているところは先ほどの画面にあった「12月15日21:33」に編集があった場所を示しています。
さて、話を戻します。こうした機能は非常に便利ですが、生徒数が多いといちいちこのログを確認するは大変です。
ですので、それを一目でわかるように工夫をする方法をご紹介します。それが「Googleスプレッドシート」と「GAS」を使用した取り組みなのです。
下準備
今回はGASとGoogleスプレッドシートを使います。まずは、Googleスプレッドシートを開きましょう。
新しくスプレッドシートを作成
Googleスプレッドシートに移動してください。クリックすると以下の画面に移動します。
新しくスプレッドシートを作成するには赤丸を押してください。
この画面が開けたらOK
新しいスプレッドシートが作成できました。
これでスプレッドシートの準備は完了です!
GASを準備
上部の「拡張機能」をクリックし、「Apps Script」をクリック
この画面が開けたらOK
以下の画面はGASのホーム画面になります。
実は、スプレッドシートの拡張機能にGASが用意されているというわけなのです。
これで準備は完了になります!
補足
GASの最初に出てくる以下の関数は消してください
コードの記入
以下のコードをコピーし、GASに貼り付けてください。
function onEdit(e) {
if (!e || !e.source) {
return; // トリガーイベント以外では処理を停止
}
const sheet = e.source.getActiveSheet();
const range = e.range;
// 対象シートの名前を確認 (必要であれば設定)
const targetSheetName = "シート名記入(今回はシート4)"; // 必要に応じてシート名を変更
if (sheet.getName() !== targetSheetName) {
return;
}
// チェックする範囲
const checkRange = sheet.getRange("生徒が記入するセル(今回はD4:H16)");
// 編集されたセルが範囲内にある場合
if (rangesOverlap(range, checkRange)) {
// 現在時刻をセル H3 にNOW関数として書き込む
sheet.getRange("日程を表示させるセル(今回はH3)").setFormula("=NOW()");
// 現在の時刻をセル I3 に書き込む
const now = new Date();
const formattedTime = Utilities.formatDate(now, Session.getScriptTimeZone(), "HH:mm:ss");
sheet.getRange("時刻を表示させるセル(今回はI3)").setValue(formattedTime);
}
}
// 範囲が重なっているか確認するユーティリティ関数
function rangesOverlap(editedRange, targetRange) {
const editedRowStart = editedRange.getRow();
const editedRowEnd = editedRowStart + editedRange.getNumRows() - 1;
const editedColStart = editedRange.getColumn();
const editedColEnd = editedColStart + editedRange.getNumColumns() - 1;
const targetRowStart = targetRange.getRow();
const targetRowEnd = targetRowStart + targetRange.getNumRows() - 1;
const targetColStart = targetRange.getColumn();
const targetColEnd = targetColStart + targetRange.getNumColumns() - 1;
return (
editedRowStart <= targetRowEnd &&
editedRowEnd >= targetRowStart &&
editedColStart <= targetColEnd &&
editedColEnd >= targetColStart
);
}
コードの説明をすると以下のようになります。
- シート4を使用
- 生徒が特定のセル(D4:H16)に編集を加えおわったら、編集した日程をNOW関数を使用し特定のセル(H3)に出力
- 編集した時刻をgetTimeZone()を使って特定のセルに(I3)に出力
ドライブにプロジェクトを保存
さて、コードを記入し終えたら、赤丸の「ドライブにプロジェクトを保存」が表示されるので、クリックしてください。
以下の画面になったらOK
赤い枠が表示されたら、問題ありません。
「実行」を選択
コードに問題がなければ、実行をクリックしましょう。
初回実行時について注意
GASの初回実行時はこの表示がされます。問題はないので、「権限を確認」をクリックしてください。
何を承認するのかというと、簡単に言えば、「あなたに代わってプログラムを実行しますがよろしいですか」という確認事項の承認です。
GASについての詳細設定は以下に記載しております↓
確認
コードが正常に動いているか「実行ログ」を確認
実行ログを見てみると「実行開始」と「実行完了」のお知らせがあります。「実行完了」の表示があれば、コードは正常に機能していると言ってもいいでしょう。
実際に、以下のことがしっかりとできているか確認してみましょう。
- シート4でプログラムが動作している
- 生徒が特定のセル(D4:H16)に編集を加えおわったら、編集した日程をNOW関数を使用し特定のセル(H3)に出力されている
- 編集した時刻をgetTimeZone()を使って特定のセルに(I3)に出力されている
スプレッドシートに戻ります。
何か打ってみますと
記入日に日時が記載されています。
完成です!
最後に
GASの設定がめんどくさい方もいると思います。
一つの案として、視野に入れてくださると幸いです。