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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

2648閲覧

【GAS】getActiveCell()でA1を取得してきてしまう

donguriko

総合スコア30

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/08/18 07:03

編集2022/08/19 23:18

発生している問題

Q192168

上記Qと同じ事象が出て困っています。
問題のあるシートに対し、2つのfunctionを処理させていますが、
どちらのfunctionでもgetActiveCell()で、実際にカーソルが
あるセル位置ではなく、A1を取得してきてしまいます。

試したこと

①同ファイル内の別の新しいシートのセルD2にカーソルを
置いた状態で、Q192168記載の以下を試しました。
activeCell.getRow() → 2.0 〇
activeCell.getColumn() → 4.0  〇
で座標位置正しく取れていそう。
問題があるのは、GAS処理をさせているシートか?

②GAS処理をさせているシート(mySheet1)のセルF8にカーソルを
置いた状態で、Q192168記載の
getLastColumn() →17  表データQ列までなので正しく取れていそう 〇
getLastRow()   →1000  表データ上で値が入っているのは8行目まで
正しく取れていない ??

editedCell = mySheet1.getActiveCell();
console.log(editedCell.getA1Notation); →A1 ×

editedCol = editedCell.getColumn();
console.log(editedCol); →1 ×

③新たな白紙シートにmySheet1の表をコピペし、
両functionを実行してみましたが、いずれもA1取得してしまい×でした。

原因と解消法のアドバイスをいただけないでしょうか? 

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

GASビギナーの非エンジニアでも理解できそうなレベルでの
回答、アドバイスをいただけると大変助かります。

<追伸:YAmaGNZさまからの照会内容確認への回答補足>
もしかすると、当方説明が言葉足りずで誤って伝わっているかも
しれないと思い、追記です。

mySheet1はファイル内のシートの名前です。
const ss = SpreadsheetApp.getActiveSpreadsheet();

<8/20訂正>
const ss = SpreadsheetApp.openById(' ~略~ ');
const mySheet1 = ss.getSheetByName('×××');
で取得しています。

※YAmaGNZさまからのご指摘通り、問題なく動いている方のGASは、
getActiciveSpreadsheetでファイル取得していましたが、
問題がある方のGASはSpreadsheetApp.openByIdで取得していました。
当方勘違いで、双方ともにgetActiciveSpreadsheetでファイル取得と、
記載し、大変申し訳ありませんでした。

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

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

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

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

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

YAmaGNZ

2022/08/18 08:09

mySheet1はどのように取得していますか?
donguriko

2022/08/18 08:16

YAmaGNZさま コメントありがとうございます。 getSheetByName で取得しています。 ちなみに新しいシートでテストした際は、getActiveSheetで 取得しました。
YAmaGNZ

2022/08/18 09:04

言葉と断片的なコードでの説明ですと勘違いが出そうですので、実際に現象が出るコードを提示してどのように実行しているのかを記載したほうが確実な回答がつくかもしれません。
donguriko

2022/08/18 09:08

YAmaGNZさま アドバイスありがとうございます。 おっしゃる通りですね。 17:57にいただいた回答を拝見していて、もしかすると裏で別の ファイル(スプレッドシート)を開きながら、問題のGASを動かして いたかもしれないという気がしてきました。 明日、問題のファイル(スプレッドシート)だけを開いてみて、 再度 確認してみたいと思います。 お忙しい中、親身になってお時間を割いてのアドバイス ありがとうございました。 改めてご連絡させていただきます。
guest

回答1

0

ベストアンサー

質問者さんの状況に当てはまるか分かりませんが

GAS

1function myFunction() { 2 3 var ss1 = SpreadsheetApp.getActiveSpreadsheet(); 4 var ss2 = SpreadsheetApp.openById('シートID'); 5 6 var active_sheet = ss1.getActiveSheet(); 7 var active_cell = active_sheet.getActiveCell(); 8 9 Logger.log('パターン1'); 10 Logger.log(active_cell.getRow()); 11 Logger.log(active_cell.getColumn()); 12 13 active_sheet = ss2.getActiveSheet(); 14 active_cell = active_sheet.getActiveCell(); 15 16 Logger.log('パターン2'); 17 Logger.log(active_cell.getRow()); 18 Logger.log(active_cell.getColumn()); 19 20}

としたとき、パターン1の場合は正常なセルを、パターン2の場合はA1を返してきました。
どうもスプレッドシートをgetActiveSpreadsheetで取得しないとgetActiveCellは正常なセルを返してこないようです。

投稿2022/08/18 08:30

YAmaGNZ

総合スコア10258

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

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

donguriko

2022/08/18 09:01 編集

YAmaGNZさま 回答ありがとうございます。 実は、別ファイルで今回問題が発生しているシートと同様に getSheetByNameでシート取得し、GAS処理させているものがあり、 問題が発生するより前の時間帯に動かした際には問題なく動いていました。。。 そちらが今正しく動くかは、まだ確認できていません。 (確認するのがちょっと怖い。。。) getActiveSpreadsheetでないと挙動がおかしくなる可能性あり とのこと、情報ありがとうございます。 上記「補足情報」部に追記させていただきましたが、ファイル? 取得の際、 getActiveSpreadsheetでファイルを取得しています。 (照会時に当方回答の記載が言葉足らずで大変失礼いたしました。) そのため、何か他に原因がありそうという理解でよいですか? ★ちなみにこれは、バグと呼ばれるGASの不具合によるものと  理解してよいですか?
YAmaGNZ

2022/08/18 08:57

openById('シートID')で取得した場合にgetActiveCellがA1になってしまうのは、バグというよりは正しい動作な気がします。 getActiveSpreadsheetの場合は確実に現在編集しているスプレッドシートを指しているのですが、openById('シートID')の場合は新たにスプレッドシートを開いて取得するという動作のはずなのでgetActiveCellが初期位置のA1になるのではないかと。
donguriko

2022/08/19 23:22

YAmaGNZさま ご連絡が遅くなり申し訳ありませんでした。 「補足情報」部にも記載させていただきましたが、YAmaGNZさま ご指摘のとおり SpreadsheetApp.openById でコード記載していました。 コード訂正したところ、正しいセル位置を取得できるようになりました。 大変失礼いたしました。 「スプレッドシート(ファイル)をgetActiveSpreadsheetで取得しないと getActiveCellは正常なセルを返してこない」、しっかり覚えたいと思います。 大変勉強になりました。 お忙しい中、迅速に回答いただきとても助かりました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問