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

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

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

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

Q&A

解決済

3回答

5309閲覧

GASで最終行のセルの値を取得したい

masaof

総合スコア7

Google Apps Script

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

0グッド

0クリップ

投稿2021/05/27 04:23

編集2021/05/27 05:56

スプレッドシートの最終行のセルの中身をGASで取得したいと思っております。

参考コード

GAS

1//対象のシートを取得 2var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sample'); 3 4//列の最終行から上方向に取得する 5var lastRow2 = sheet.getRange(sheet.getMaxRows(), 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); 6Logger.log(lastRow2); //8

上記を参考に、行うと当然ですが値がある最終行しかでません。
なので、以下のように書くとエラーが出ます。

GAS

1var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sample'); 2 3//列の最終行から上方向に取得する 4var lastRow2 = sheet.getRange(sheet.getMaxRows(), 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); 5lastRow2 = lastRow2.getValue(); 6Logger.log(lastRow2); //8

エラー内容

エラー

TypeError: .getValue();.getValue is not a function

求めるもの

lastRow2に、最終行のセルの値を取得できるコードの
アドバイスなどを教えてください。

修正内容

lastRoe2には、1列目の最終行の値を取得したい。
1列目:日付
2列目:システム名
3列目:処理可否

イメージ説明

現時点ではA12ですが、一週間ごとにカラムが増えるので
その都度取得するようにしたいです。

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

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

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

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

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

itagagaki

2021/05/27 05:27

値が欲しいのは、シートの中でデータが含まれる最終行の、どれかのカラムの値、ということですか? その行のどこかにはデータが含まれているが、目的のカラムにはデータが無くても、そこで良いのですか? そして、目的のカラムはどこですか?
masaof

2021/05/27 05:57

記載を行いました。 宜しくお願い致します。
guest

回答3

0

ベストアンサー

こちらでいかがでしょうか?

function getLastRowData(){ //対象のシートを取得する var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sample'); //列の最終行から上方向に取得する。lastRow2には、最終行の行番号が入ります。 var lastRow2 = sheet.getRange(sheet.getMaxRows(), 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); //「行番号、列番号、行数、列数」の順番でRangeを取得し、値を取得します。(二次元配列) var values = sheet.getRange(lastRow2, 1, 1, 3).getValues(); //表示を修正します values[0][0] = Utilities.formatDate(new Date(values[0][0]),"JST","yyyy/MM/dd"); //最終行の1列目の値 Logger.log(values[0][0]); //最終行すべての値(二次元配列) Logger.log(values); }

投稿2021/06/03 09:33

gas.engine

総合スコア608

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

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

0

単純に最終行から最終列まで回せばいいような気がします。

lastRoe2には、1列目の最終行の値を取得したい。

gas

1function myFunction() { 2//対象のシートを取得 3var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sample'); 4 5//列の最終行から上方向に取得する 6var lastRow2 = sheet.getRange(sheet.getMaxRows(), 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); 7lastRow2 = sheet.getRange(lastRow2, 1).getValue(); 8Logger.log(lastRow2); 9}

lastRaw2が最後の行数なのでsheet.getRangeで行数にlastRaw2を指定してgetValue()で取れます。

投稿2021/05/27 04:54

編集2021/05/27 06:38
tmsw

総合スコア97

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

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

masaof

2021/05/27 05:11

ご回答ありがとうございます。 配列に関してはあまり理解できていないでのすが、 この場合、配列(data)にループで最終行までの値を入れ込んでるように見受けられます。 最後のLogge.logでログに出力されるのは、最終行だけではなく 配列の中に入ったすべてが出力されるのでしょうか
tmsw

2021/05/27 05:41

ごめんなさい。 最終行のデータ全てが欲しいのかと思ってましたが勘違いしてたかもしれないです。 >この場合、配列(data)にループで最終行までの値を入れ込んでるように見受けられます。 入ってるデータは全て最終行のデータです。 (最終行の左端の列から右端の列まで片っ端から覗いていってデータ取ってるイメージです。) >最後のLogge.logでログに出力されるのは、最終行だけではなく配列の中に入ったすべてが出力されるのでしょうか 配列の中に入ったデータが全て出力されますが、最終行のデータしか取ってないので表示されるのは最終行のデータのみとなります。
masaof

2021/05/27 05:58

こちらの説明不足で申し訳ございません。 修正行いました。 またご回答ありがとうございます。 tmsw様の回答の件理解できました。 ありがとうございます。
guest

0

getRow()は行番号を返すのでlastRow2は数値になりますよね。
それに対してgetValue()しているのでエラーになっています。

投稿2021/05/27 04:33

itagagaki

総合スコア8402

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

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

masaof

2021/05/27 05:12

ご回答ありがとうございます。 数値(lastRow2)を文字列に変換して、getValue()を行えばよいということでしょうか
itagagaki

2021/05/27 05:28

それではダメです。 目的があいまいなので「追記・修正依頼」を書きました。 質問を編集して、目指す目的を明確化してください。
masaof

2021/05/27 05:57

ありがとうございます。 記載を行いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問