質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

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

Google Apps Script

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

Q&A

解決済

2回答

1591閲覧

GAS 指定のセルに”完了”と入力されると、別のスプレッドシートにコピーした値を貼り付けたい

tadatti

総合スコア13

Google スプレッドシート

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

Google Apps Script

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

0グッド

1クリップ

投稿2021/11/04 04:26

編集2021/11/04 05:03

前提・実現したいこと

担当者にスプレッドシートのURLを渡しており、確認作業を依頼します。
指定のセルを”完了”とすると、
担当者のスプレッドシートには送信日が
管理者の別のスプレッドシートに担当者のスプレッドシートの日付と担当者の書かれたセルがコピー
されるようにしたいです。

発生している問題・エラーメッセージ

担当者のスプレッドシートに日付が入力されるのですが、管理者の別のスプレッドシートにはなにもコピーされません。

該当のソースコード

function onEdit(e) { const workingSheet = e.range.getSheet(); const date = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd") if(e.value !== "完了") {return;} var result = Browser.msgBox('終了連絡をしますか?', Browser.Buttons.OK_CANCEL); if(result == 'ok'){ Logger.log(date); SpreadsheetApp.getActiveSheet().getRange(1,6).setValue(date); const formValue = workingSheet.getRange(1, 1, 1, 5).getValues(); var ss = SpreadsheetApp.openById("管理者のurl"); var Sheet_CopyTo = ss.getSheetByName('提出情報'); var LastRow = Sheet_CopyTo.getLastRow(); Sheet_CopyTo.getrange(LastRow+1,1,LastRow+1,5).setValue(formValue); } else if (result == 'cancel'){ SpreadsheetApp.getActiveSheet().getRange(1,7).setValue("対応中"); } }

表示されるエラー

TypeError: Cannot read property 'range' of undefined
onEdit @ コード.gs:2

が出ます。

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

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

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

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

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

sawa

2021/11/04 04:55

GASの質問はGoogle Apps Script のタグがあるので、それを付けましょう。 あと、実行ログを確認すると多分なにかしらエラーが出てるんじゃないでしょうか?
tadatti

2021/11/04 06:03

失礼しました。ご指摘のところ、追記しました。
sawa

2021/11/04 23:39

追記、修正ありがとうございます。 たぶん追記いただいたエラーは、エディタを手動実行した際のものかと思われます。 それではなくて、エディタ左側の実行数のメニューから、トリガーで実行された際のログを確認されることをお勧めします。
tadatti

2021/11/05 05:55

手順をお示しいただき、ありがとうございます。 エディタ左側の実行数のメニューから、トリガーで実行された際のログを確認 これを知らず、エディタの手動実行で止まってしまって、困ってました。
guest

回答2

0

自己解決

最終的に下記で解決いたしました。
・そもそものコピーからペーストの部分で記載を間違っていた
・トリガーの設定が”変更時”になっていた
が原因でした。
単純なミスで恥ずかしい限りです。

function onEdit(e) { const workingSheet = e.range.getSheet(); const date = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd") if(e.value !== "完了") {return;} var result = Browser.msgBox('終了連絡をしますか?', Browser.Buttons.OK_CANCEL); if(result == 'ok'){ Logger.log(date); SpreadsheetApp.getActiveSheet().getRange(1,6).setValue(date); var formValue =SpreadsheetApp.getActiveSheet().getRange(1,1,1,6).getValues(); var ss = SpreadsheetApp.openById("スプレッドシートID"); var Sheet_CopyTo = ss.getSheetByName('提出情報'); var LastRow = Sheet_CopyTo.getRange(1, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); Sheet_CopyTo.getRange(LastRow+1,1,1,6).setValues(formValue); } else if (result == 'cancel'){ SpreadsheetApp.getActiveSheet().getRange(1,7).setValue("対応中"); } }

*最終行をA列の最終行で決めたかったので、そこも変更しています。

投稿2021/11/05 05:59

tadatti

総合スコア13

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

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

0

「完了」ボタンを作ってボタンクリックしたら動くようにした方がいいと思います。
いちいち「完了」と入力するのは大変なので。

投稿2021/11/04 05:09

qqfsdfsafd

総合スコア599

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

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

tadatti

2021/11/04 06:02

入力ではなく、選択できるようにしております。 (チェック前、作業中の選択肢も設定しているので、ボタンにすることは考えてないです)
qqfsdfsafd

2021/11/04 10:18

const workingSheet = e.range.getSheet(); ↑ここでエラーが出ています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問