🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

2回答

1047閲覧

【Googleスプレッドシート】共有しているユーザーの最終確認日時を自動で入力したい

mst0

総合スコア9

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2020/12/11 08:40

前提

GoogleフォームとGoogleスプレッドシートを連携させて、フォームから送信された情報がスプレッドシートに自動入力されるようにしています。
複数のスタッフが閲覧できるようにスプレッドシートは複数のアカウントに共有しています。

実現したいこと

現在、スタッフA、スタッフB、スタッフC、スタッフDさんの4人にスプレッドシートを共有しており、各スタッフの最終閲覧日時を自動でセル内に記載することは可能でしょうか?(指定したセルに記載できると助かります。)
また、確認の基準は、シートを開いた時点で 確認済 と表示できると良いです。

「確認」という列を設けて、スタッフが手動で◯印を入力するなどが手軽だと思うのですが、記入忘れを防ぎたいので自動入力ができたらと考えています。

お手数をおかけいたしますがご教示いただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

GsuiteやGoogleworkplaceなら、共有しているスプレッドシートの右上に折れ線グラフみたいなボタンがあるので、そちらを開くことで日々のユニーク閲覧者数や誰が最後にいつ開いたかが取得できています。
一番簡単なのは、その機能を使って確認する方法です。

GASでシートに書き出す場合は、onOpen のシンプルトリガーではなくて、手動でスプレッドシート起動時にトリガーをセットしてあげれば、e.user.getEmail() で 開いたユーザーが取得できます。

https://developers.google.com/apps-script/guides/triggers/events

投稿2020/12/16 23:52

sawa

総合スコア3002

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2020/12/17 15:13

質問者じゃなくてすみませんが伺いたいです。 トリガーってオーナーじゃなくても発動するのでしょうか? (今回四人なので、セットアップすればいいだけ、のようにも思いますが、ご存知であれば)
sawa

2020/12/18 00:00 編集

papinianus様 私も昔は使う人にトリガーをセットしてもらってた気がするんですが、現状ではインストーラブルトリガーでもスクリプトのオーナーを実行者として、他の人が起動したり、編集したりでも発動するようです。 https://developers.google.com/apps-script/guides/triggers/installable 今回のパターンだと、スプレッドシート起動時に発動するトリガーをセットしていれば、Gsuiteユーザーじゃない場合でも開いた日時をシートに書き出すことは可能です。user部分に関してはフリーのGmailアカウントだと勝手に取得は無理ですが、Gsuiteの同じ組織内であれば取得可能であることを確認しております。(Gsuiteの権限ロールは関係なく、作成者が管理者でなくてもいけます)
guest

0

javascript

1const q309630_onOpen = (e) => { 2 const formSheetName = "シート1"; 3 const targetColumnName = "対応状況"; 4 const formSheet = SpreadsheetApp.getActive().getSheetByName(formSheetName); 5 const dat = formSheet.getDataRange().getValues(); 6 const targetColumn = dat[0].reduce((a,c,i) => c === targetColumnName ? i : a,-1); 7 if(targetColumn === -1) return; 8 const userEmail = e.user.getEmail(); 9 formSheet.getRange(dat.length, targetColumn, 1, 1).setValue(userEmail); 10}
  • onOpen をトリガー設定すると動作するっぽいので、サンプルを書きました。
    が、最終行の「対応状況」が空かを判定してない(というか仕様が分からないので判定すべきかも分からない)ですし、そもそも最終行に入れるべきかも分からない(例えばチェックするまでに 2 つ以上の回答が来た状況でどうするのか)ですし、開いたときに"フォームの回答"シートが開かれているかも確認してないですし(確認して弾くことはできますが、一旦弾いてしまうともう二度と onOpen は発火しないので)、はっきり言って使いものにならないでしょうね。
    仕様がはっきりしたら別質問立ててください。

投稿2020/12/13 03:30

編集2020/12/18 08:12
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mst0

2020/12/16 04:20

>質問の感じからすると、共有相手は編集しなくてよいのかなと考えました。これが正しいとしたら私だった>らwebアプリケーションとして公開、にして、リンクが開かれたときに確認済を書き込みますね。 >誰が開いたかを特定する必要があるのでしょうか。 >また、どのようなデータのどこに確認済と入れるか、も不明です。 今回、お問い合わせ管理票としてスプレッドシートを活用したいと考えているため、 共有しているユーザーは、対応状況を追記や編集する必要があります。 「誰が開いたかを特定する」目的は、お問い合わせ対応にヌケ・モレがないかを確認するためです。 「どのようなデータのどこに確認済と入れるか」については、Googleフォームとスプレッドシートを連携した際にフォーム側で設定した問い合わせ項目が横一列に表記されますが、その一番右側の列に「対応状況」という項目を手動で追加して各担当が入力できるようになればと考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問