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

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

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

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

Q&A

解決済

1回答

479閲覧

「var ~」で設定する定義は、その関数のなかでのみ生きるのではないのか。

koromo_t

総合スコア60

Google Apps Script

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

0グッド

1クリップ

投稿2018/04/04 03:24

こちらの質問の関連です。

javaScript

1 var ss = SpreadsheetApp.getActive().getSheetByName('シート名'); 2```と定義することで、 3指定のシートにのみ、そのスクリプトが適用されるようになったと思ったのですが、 4改めてテストしてみると、やはり、ほかのシートにも作用しているみたいです。 5原因を考えたところ、別のスクリプトファイルとはいえ、 6同じ定義名を使っている場合があるから、 7ほかのスクリプトファイルも反応してしまうのではないかと思い、 8それぞれ、独自の定義名を設定し直したところ、 9今度こそ、指定のシートにのみスクリプトが反応するようになったのではないかと思います。 10 11var ~」で設定する定義は、その関数のなかでのみ生きると思っていたのですが、 12そういうわけではないのでしょうか?

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

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

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

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

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

sk_3122

2018/04/04 04:18

シートを取得している箇所だけ抜き出しても ちょっと分からないのではないかなと思うのですが… 変数に取った ss に対して何かしているけれど、それが他のシートにも反映されてしまっているのではないか、ということなのでしょうか。 何をしているのか、どうなったから他のシートにも影響していると判断したのか等 書かないと回答が付きづらいのじゃないかなと思います。 もう少し全体のソースを貼った方が良いかなと(可能であれば現象が再現するような簡略化したソースが貼れればベスト)
koromo_t

2018/04/04 04:24

コメントありがとうございます! ほかの方の指摘もあり、たしかに、質問が具体性に欠けていたと反省しました。 今度はもっと具体的に質問してみようと思います。
guest

回答1

0

ベストアンサー

原因を考えたところ、別のスクリプトファイルとはいえ、

同じ定義名を使っている場合があるから、
ほかのスクリプトファイルも反応してしまうのではないかと思い、
それぞれ、独自の定義名を設定し直したところ、
今度こそ、指定のシートにのみスクリプトが反応するようになったのではないかと思います。

状況がよく分かりませんが、とりあえず、以下で基本的なポイントを確認頂ければと思います。

確認ポイント1

Code1.gs

var x = 100; function myFunction2() { var y = 200; }

Code2.gs

function myFunction1() { Logger.log(x); //100 Logger.log(y); //error }

例えば、Code1.gs内で定義されているグローバル変数xとローカル変数yを、Code2.gs内でLogger.log()を使って参照するとします。

この場合、Code1.gsとCode2.gsはそれぞれ別のスクリプトファイルであるけれど、Code2.gs内でCode1.gs内で定義されたグローバル変数xは参照可能です。

しかし、Code1.gs内で定義されたローカル変数yは参照が出来ません。

確認ポイント2

Code3.gs

function myFunction3() { //変数zを宣言して100を代入 var z = 100; Logger.log(z); //100 //変数zを再び宣言して200を代入 var z = 200; Logger.log(z); //200 //宣言済み変数zに300を代入 z = 300 Logger.log(z); //300 }

次に、Code3.gsというファイルの中にmyFunction3という関数があったとして、その中には変数zがあるとします。

最初は100を変数zに代入し、値を確認すると100。
そして、同じ変数zに今度は200を代入すると、値は200に変わります。

まとめ

var ss = SpreadsheetApp.getActive().getSheetByName('シート名');

ということで、例として挙げたコードでは変数xやyなどに数字を代入していましたが、
変数に代入するものがシートオブジェクトであっても同じことなので、置き換えて考えてみてください。

投稿2018/04/04 03:56

編集2018/04/04 04:04
HayatoKamono

総合スコア2415

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

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

koromo_t

2018/04/04 04:23

回答ありがとうございます! やはりそうですよね…。 たとえば、function onEdit1()内で定義した「ss」と、function onEdit2()内で定義した「ss」は、 別物扱いされるということが確認できました。 そして、たしかに、質問が具体性に欠けていたと反省しました。 今度はもっと具体的に質問してみようと思います。 ありがとうございました!
HayatoKamono

2018/04/04 04:25

良かったです!何かで詰まった場合は、動作確認、仕様確認の為だけの最小限の簡単なコードを書いてみると自己解決に至りやすくなると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問