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

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

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

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

Q&A

解決済

1回答

9133閲覧

getLastRow()で取得した最終行がシートの範囲外にある

syuya

総合スコア12

Google Apps Script

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

0グッド

1クリップ

投稿2019/04/28 16:45

編集2019/04/28 16:54

Google Apps ScriptでGoogle Sheetsの最終行までを取得し、取得し終わった行を削除する処理をしています。
大抵はうまくいくのですが、まれに実行が失敗することがあります。
原因を調べたところ、 getLastRow() で取得した行番号が意図と違うことがあるのではないかという疑いを持っています。
詳細な仕様、回避手段等がわかれば教えていただけますでしょうか。

具体的な処理手順としては以下の通りです。

  1. 該当のシートには自動で行が追加される(Microsoft Flow経由で書き込んでいます)
  2. 定期的にスクリプトを起動
  3. 該当シートの2行目から最終行までのデータを読み込む(1行目はタイトル行)
  4. 該当シートの2行目から最終行までを行ごと削除する

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

実行が失敗すると、G Suite Developer Hubの実行記録に以下のようなエラーメッセージが残ります。
再現条件は不明です。

エラー これらの行は範囲外にあります。

該当のソースコード

該当部分は下記の通りです。
データの取得~削除までの間、シート自体の操作は行っていません

GoogleAppsScript

1var ss = SpreadsheetApp.getActiveSpreadsheet(); 2var LogSheet = ss.getSheetByName("Sheet1"); 3var LastRow = LogSheet.getLastRow(); 4 5var targetRange = LogSheet.getRange(2, 1, LastRow, 1).getValues(); 6~処理~ 7 8LogSheet.deleteRows(2, LastRow - 1); //1行目はタイトル行のため残す

試したこと

LogSheet.getLastRow()LogSheet.getMaxRows() を試したところ、失敗したログでは

LogSheet.getLastRow() : 77 LogSheet.getMaxRows() : 76

となりました。
つまり、「データの入っている最終行」が「シート自体の最大行」よりも大きい、という状態です。
また、成功したログでは両者の値は同じになるようです(試行回数が少ないため、確実かどうかはわかりません)。
可能性としては「最終行のデータがスプレッドシートの範囲外にある」「 getLastRow() には注意すべき仕様がある」などがありそうですが、調べてもそれらしい答えが見つからなかったため、原因や対応方法がわかればお教えください。

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
結論としては、スプレッドシートの仕様に引っかかっていたのが原因のようです。

  • スプレッドシート内に過去のログが十数万行溜まっていた
  • ログをとっていたシートがZ列まであった
  • ログシートのセル数が十数万行×26列となった
  • 他のシートを含め、スプレッドシート全体のセル数が上限である500万を超えた

不要な列を消したら動作が安定するようになりました。
同じ状況に遭遇する人は少ないと思いますが、記録として残しておきます。

参考:Google ドライブに保管可能なファイル

投稿2019/04/29 10:19

syuya

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問