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

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

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

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

Q&A

解決済

1回答

766閲覧

現在選択されている範囲を取得したい

3_April_2021

総合スコア48

Google Apps Script

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

0グッド

1クリップ

投稿2021/10/12 05:52

前提・実現したいこと

たとえばgetSheets()[4].getRange('I2:I3')が選択されている場合、この範囲を現在選択されている範囲という指定によって取得したいと思います。

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

関数testは期待した値「5番目のシート,I2:I3,2921」ではなく、「1番目のシート,A1,1111」を返します。この原因を知り、このコードを修正したいと思います。

該当のソースコード

gs

1const ss = SpreadsheetApp.getActiveSpreadsheet(); 2function test(){ 3const sheet = ss.getActiveSheet(); 4const range = sheet.getActiveRange(); 5Logger.log(`${sheet.getIndex()}番目のシート`);//1番目のシート 6Logger.log(range.getA1Notation());//A1 7Logger.log(`${range.getRow()}${range.getColumn()}${range.getNumRows()}${range.getNumColumns()}`);//1111 8}

試したこと

関数test2は、I2:I3のFORMATをトリガーとして呼び出された関数です。使用メソッドはこの場合に期待した値(「5番目のシート,I2:I3,2921」)を返しました。

gs

1const ss = SpreadsheetApp.getActiveSpreadsheet(); 2function test2(e){ 3Logger.log(e.changeType);//FORMAT 4const sheet = ss.getActiveSheet(); 5const range = sheet.getActiveRange(); 6Logger.log(`${sheet.getIndex()}番目のシート`);//5番目のシート 7Logger.log(range.getA1Notation());//I2:I3 8Logger.log(`${range.getRow()}${range.getColumn()}${range.getNumRows()}${range.getNumColumns()}`);//2921 9}

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

コンテナは使用中のスプレッドシードになっています。

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

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

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

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

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

papinianus

2021/10/14 10:03

changeType が OTHER のときに、期待の動作を得られない、という意味ですか? であれば重複した質問ではないですか? (変更時トリガーではなく)編集時トリガーを利用するようにはできませんか?
3_April_2021

2021/10/15 00:29

いいえ、ちがいます。 関数testは、エディターからの実行結果です。私はこのときにトリガーOTHERと同じ結果を期待しましたが、失敗しました。activeメソッドの使用法の間違いがありますか?
3_April_2021

2021/10/15 00:53

もう一度読みましたが、なぜOTHERなのですか? FORMATで何かを誤解させたならまだわかりましたが。重複の可能性を前提としているせいで、何か余計に混同しているように思います。 重複が疑っていると思われる質問とこの質問で解消しようとしている問題は繰り返すように別ですから、もし協力していただける場合は一度この前提で読み直すことをお願いします。
guest

回答1

0

ベストアンサー

関数testは、エディターからの実行結果です

test という関数を SpreadSheet の container bound script で、エディタから実行した場合、下記を得ることができます。

text

1Head test エディタ 2021/10/16 1:40:44 0.445 秒 2完了 3Cloud のログ 42021/10/16 1:40:45 情報 5番目のシート 52021/10/16 1:40:45 情報 I2:I3 62021/10/16 1:40:45 情報 2921

マウス操作で選択した状態とコードで選択させた状態を比較しても期待した結果を得られます。

javascript

1const ss = SpreadsheetApp.getActiveSpreadsheet(); 2const verify = () => { 3 test(); 4 compare(); 5} 6function test(){ 7const sheet = ss.getActiveSheet(); 8const range = sheet.getActiveRange(); 9Logger.log(`${sheet.getIndex()}番目のシート`);//1番目のシート 10Logger.log(range.getA1Notation());//A1 11Logger.log(`${range.getRow()}${range.getColumn()}${range.getNumRows()}${range.getNumColumns()}`);//1111 12} 13 14const compare = () => { 15 ss.getSheets()[4].activate().getRange("I2:I3").activate(); 16 const sheet = ss.getActiveSheet(); 17 const range = sheet.getActiveRange(); 18 Logger.log(`${sheet.getIndex()}番目のシート`);//1番目のシート 19 Logger.log(range.getA1Notation());//A1 20 Logger.log(`${range.getRow()}${range.getColumn()}${range.getNumRows()}${range.getNumColumns()}`);//1111 21}

text

1Head verify エディタ 2021/10/16 1:45:23 0.941 秒 2完了 3Cloud のログ 42021/10/16 1:45:23 情報 5番目のシート 52021/10/16 1:45:23 情報 I2:I3 62021/10/16 1:45:23 情報 2921 72021/10/16 1:45:23 情報 5番目のシート 82021/10/16 1:45:23 情報 I2:I3 92021/10/16 1:45:23 情報 2921

投稿2021/10/15 16:49

papinianus

総合スコア12705

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

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

papinianus

2021/10/15 16:53

可能性として低いと思いますが、新しいスプレッドシートで試してみてはいかがでしょうか。 (低い可能性として、例えば、他に test という同じ名前の関数が存在して、そちらで何らかの操作をしている場合に、予期しない結果となる事象を考えました)
3_April_2021

2021/10/17 11:14

回答と同じ結果を得られない問題についてですが、質問364013はこの問題解決の一環として限定的協力を求めたのでこの背景的問題の関連情報は共有されていません、誤解による新たな問題の発生を防ぐため、この件は感謝の意の報告に留められます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問