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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

3088閲覧

GAS データがある最終行取得したい

yyyooo34343

総合スコア79

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2019/03/24 09:29

編集2019/03/25 05:21

GASを使ってスプレッドシートのデータがある最終行または最終カラムを取得したいです。
前まではスプレッドシートのデータがある最終行までのデータは下記のコードで取得できていたのですが、シート数が何枚にもなり下記の(変更後)にコードを変更しました。
そしたら var row = sheet.getLastRow();をデバックで見てみたらデータではなくセルの最終行のデータが取得されてしましました。
http://code-ur-life.blogspot.com/2014/03/google-apps-script-script.htmlのサイトなどを見てみたのですが私がやりたい、データがある最終行までのデータを取得するやり方がわかりません。

なぜデータを取得したいかというとデータを取得してそのデータをforEachで回したいからです。

初心者なので初歩的な質問または文がおかしいみたいなとこがあるかもしれませんが、分かる方がいたら教えていただきたいです。
よろしくお願いします。

GAS

1// データがある最終行までのデータが取得できていたコード 2var sheet = SpreadsheetApp.getActiveSheet(); 3var row = sheet.getLastRow();

GAS

1変更後 2 var spreadsheet = SpreadsheetApp.openById(IDが入っています); 3 var sheet = spreadsheet.getSheetByName('シート2').activate(); 4 var row = sheet.getLastRow(); 5

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

他にrowという変数を使っていませんか?

投稿2019/03/25 00:30

papinianus

総合スコア12705

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

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

yyyooo34343

2019/03/25 03:06

返信遅れました。 下記のようにシートの範囲を取得するときにrowを使っています。 それ以外では使っていないです var introducerCopy = sheet.getRange(4,3,row-1,1);
papinianus

2019/03/25 03:12

書き方が不親切すぎました。すみません。 `row =`のように左辺に置いていませんか? 提示された部分は正しそうに見えます(行のデータではなく、行の番地が取れそうです)
yyyooo34343

2019/03/25 03:22

ありがとうございます。 修正したらなおりました
yyyooo34343

2019/03/25 03:24

別の質問なのですが var addIntroducer = introducerCopy.copyTo(sheet.getRange(4, 12)); として シートの値を別のセルに移したいのですが addIntroducer に値が入らずにudifeinedとなってしまいます。どうしたらいいでしょうか?
papinianus

2019/03/25 03:29

コードが不明ですが、copyToはコピーを実行する処理で、返り値がないので、左辺には(コピーの成功・不成功にかかわらず)何も入りません。なので常にundefinedです。 `"元のRange".copyTo("先のRange");`と書きます。 仮に元シートがorg,先シートがdstだとしたら org.getRange(1,1).copyTo(dst.getRange(4,12)); みたいな書き方です。
yyyooo34343

2019/03/25 03:53

// 変数 introducerCopy に コピー元の範囲を取得 var introducerCopy = sheet.getRange(4,3,row-1,1); ↓ // コピー先にコピー var addIntroducer = introducerCopy.copyTo(sheet.getRange(4, 12)); コピー元もコピー先も同じシートです。 同じシートにコピーする場合は書き方が違うのでしょうか?
papinianus

2019/03/25 04:04

うまく伝えられずに申し訳ないのですが、=の左辺に何を置いても無意味です(動作に影響しないし、完了したかどうかを知る手掛かりにもならない) introducerCopy.copyTo(sheet.getRange(4,12, row-1, 1)); でどうでしょうか?
yyyooo34343

2019/03/25 05:23

ご丁寧に返信してくださりありがとうございます。 修正し実行したら、今度は 関数 INDIRECT のパラメータ 1 の値が「1_CSV入力!2:」です。これは無効なセル/範囲の参照ですというエラーになりました。 上記に写真を添付したのですが原因ってなんなんでしょうか? 色々申し訳ないです
papinianus

2019/03/25 05:41

今までの質問との関連が読み取れません。 エラーはコピーした後の領域でそうなる、という意味でしょうか? 原因というかエラーが言っているのは、"1_CSV入力!2:"はセルの参照として不正なので、"1_CSV入力!A2:B4"みたいな有効な文字列にしないといけませんよ、という意味です。 コピーで発生しているとしたら、コピー元のセルでINDIRECTの関数を使っているかなど、具体的なシートでデバッグするほかないです(まずは、手でコピペしてうまく行くことが大前提なので、そこからですかね)
yyyooo34343

2019/03/25 15:25

返信遅れました。申し訳ありません。 コピー元ではINDIRECTの関数を使っていました。 別のページにこの質問を投稿しましたので答えてくれたら助かります。 https://teratail.com/questions/181277
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問