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

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

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

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Q&A

解決済

2回答

1850閲覧

【GAS】スプレッドシートの最終行に書き込みができないケースって、どのような時が考えられますでしょうか?

tanaka_444

総合スコア19

Google スプレッドシート

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

0グッド

0クリップ

投稿2022/03/29 12:30

前提

googleフォームに入力した情報を、スプレッドシートの指定のシートの入力されているデータの次の行(最終行)に出力できるよう、GAS作成をしています。

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

データ入力されている次の行ではなく、文字が何も入力されていなくてもスプレッドシートの最終行(1番最後の行)に出力されてしまうのですが、要因は何が考えられますでしょうか?
以下のプログラムで実行しても何もエラーがでないのですが、正しい場所に書き込みができず困っております。
考えられる要因を教えていただけますと助かります。よろしくお願いしますm(__)m

該当のソースコード

function sendReply(e) {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('シート2');

var writeRow = sheet.getLastRow()+1;

console.log(writeRow)
console.log(e.values)

sheet.getRange(writeRow, 1).setValue(e.values[0]); sheet.getRange(writeRow, 2).setValue(e.values[1]);

}

試したこと

スプレッドシート内に、入力規則を引いていたので(プルダウンで入力文字を選べる形式)
それを解除してみたのですが、同じ結果になってしまいます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

つかいこなせていないだけかもしれませんが、わたしは、.getLastRow() と .match() は、うまくいかない事がまれにあるのであまり使いません。

面倒ですが、いつも

Google

1while(sheet.getRange(writeRow, 1).getValue() !== ""){ 2 writeRow++ 3}

ということをしています。

投稿2022/03/29 12:47

編集2022/03/29 12:48
penguin520

総合スコア345

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

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

tanaka_444

2022/03/30 06:24

ありがとうございます! ご返信いただいたプログラムは、 var writeRow = sheet.getLastRow()+1; のプログラムの代わりとなるものでしょうか? writeRow++ の部分など、 何を実施されているのか分からなかったため、確認させてください。 よろしくお願いします。
tanaka_444

2022/03/30 10:34

ありがとうございますm(_ _)m 置き換えて実行してみたところ、 writeRowの定義がされていないとエラーがでるのですが、 対応方法分かりますでしょうか?
penguin520

2022/03/30 10:43

あ。ごめんなさい。 var writeRow = 1; while(sheet.getRange(writeRow, 1).getValue() !== ""){ writeRow++ } でした。
penguin520

2022/03/30 10:55

!= "" のほうがいいかもしれません。
tanaka_444

2022/04/03 11:55

できました! ありがとうございますm(_ _)m
penguin520

2022/04/03 13:26

よかったです。熱心に勉強されているようなので、がんばってください!!!
guest

0

解決したようなので蛇足になりますが、セルに空白 "" が入力されていると、.getLastRow() が期待した値を返さないです。
例えばですが、C1 に以下の式を入れます。
=arrayformula(if(isblank(A1:A10),"",A1:A10+B1:B10))
そして、A1:A5 と B1:B5 に何か数字を入れます。見かけ上 C6:C10 は空欄になりますが、"" が入っているので、.getLastRow() では 10 が返ってきます。
以下のように、if文の true の場合に何も入力しなければ、.getLastRow() では 5 が返ってきます。
=arrayformula(if(isblank(A1:A10),,A1:A10+B1:B10))
ご参考まで。

投稿2022/04/18 08:37

what_on_earth

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問