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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

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

Q&A

2回答

1121閲覧

gas トリガーが実行できず困っています。

inamin

総合スコア0

Google Apps Script

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

0グッド

0クリップ

投稿2021/05/17 08:38

前提・実現したいこと

会社の倉庫の在庫管理用シートをGASを使って作成中です。
今回スプレッドシートにて串刺し計算の関数を自作し運用する予定です。
関数は完成しスプレッドシートで問題なく動いているのですが、トリガーを使って実行しようとするとエラーが起きます。

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

1・スクリプトエディタの時計マークから変更時でのトリガーで
2・図形描写からトリガーを作ったとき

エラーメッセージ ```1・Exception: 範囲は見つかりませんでしたat tes1(コード:15:24) 2・Exception: 引数は null にできません: a1Notation ### 該当のソースコード function tes1(basyo) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var goukei = ss.getSheetByName('goukei'); var s1 = ss.getSheets()[1]; var s2 = ss.getSheets()[2]; var s3 = ss.getSheets()[3]; var s4 = ss.getSheets()[4]; var s5 = ss.getSheets()[5]; //console.log(basyo); //各シートの数値を取得 //var basyo = "B1"  var num1 = Number(s1.getRange(basyo).getValue()) //console.log(num1); if(isNaN(num1) == true){ //数字ではない場合 num1 = 0; } var num2 = Number(s2.getRange(basyo).getValue()) //console.log(num2); if(isNaN(num2) == true){ //数字ではない場合 num2 = 0; } var num3 = Number(s3.getRange(basyo).getValue()) //console.log(num3); if(isNaN(num3) == true){ //数字ではない場合 num3 = 0; } var num4 = Number(s4.getRange(basyo).getValue()) //console.log(num4); if(isNaN(num4) == true){ //数字ではない場合 num4 = 0; } var num5 = Number(s5.getRange(basyo).getValue()) console.log(num5); if(isNaN(num5) == true){ //数字ではない場合 num5 = 0; } //各シートの数値の合計を表示 return num1 + num2 + num3 + num4 + num5; } ```ここに言語名を入力 ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/05/17 11:42 編集

//var basyo = "B1" のようにbasyoの定義部分がコメントアウトされているのが原因ではないかと思うのですが、 先頭の//を外すのではだめなのでしょうか? ・図形描写をトリガーにするとは具体的にはどういうことでしょう? (図形をクリックしたときに実行するという意味?) その際、関数の引数(basyo)に何を渡すのでしょうか。
guest

回答2

0

質問のタイトルが

** 「gas トリガーが実行できず困っています。」**

ですが、内容見る限り恐らく真の課題は

「GASで作成した自作関数が、再計算されなくて困っています。」

だと思われるので、そちらを解消する為の回答を入れておきます。

たぶん どこかのセルに =test1("B1") のような式が入っており、
該当の複数シートを串刺し計算をされてるのだと思います。
(Excelの串刺し計算の機能はGoogleスプレッドシートには無いんですよね)

ただ、引数である"B1"は単なる文字列で変化がないので、
計算対象となるセルの値が変更されても自作関数は再計算されません。

1・スクリプトエディタの時計マークから変更時でのトリガーで

こっちは少し難しいですが、

2・図形描写からトリガーを作ったとき

こちらは近いことが比較的簡単にできます。

以下のように冒頭の関数名の引数をもう一つ追加してあげて、

function tes1(basyo,run) {

この自作関数が入ってるセルの横辺りの使ってないセル位置を引数としてあげてください。

例えば A1に式が入ってて、下のA2が使ってないセルなら以下のような式に(A2の方はクォートで括らない)

=test1("B1",A2)

そして A2セルをデータの入力規制でチェックボックス化すれば、
チェックのON,OFF切換えが再計算スイッチの役割を果たしてくれます。

こんな感じで対応する方法はどうでしょうか?たぶん一番変更なくて簡単じゃないかなと。

投稿2021/05/19 00:11

sawa

総合スコア3002

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

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

0

qnoirさんの指摘と同じですが、

この箇所でまずエラーになると思います。
おそらくダミーのセルってことですかね?

gas

1//var basyo = "B1" 2var num1 = Number(s1.getRange(basyo).getValue()) 3                   ↑ここ

gas

1function tes1(basyo) { 2 ↑ここの値はどこから来ますか? 3

スプレッドシートにボタンを押すと実行したいということだと思うのですが、
ボタンにtes1を設定してbasyoを直接は渡せないので、
プログラム上にベタ書きするか、シートの決めた位置から取得する必要があります。

おそらくまだプログラミングを始めたばかりだと思うので、なかなか難しいと思いますが
頑張ってみてください!

質問があればご協力いたします!!

投稿2021/05/18 15:31

Tatsunosuke

総合スコア599

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問