ご訪問ありがとうございます。
Googleシートマスターのひろしです。
今回は、とっても価値の高い方法をお伝えします。

これを知ることであなたは、
- GASで値のコピペができます
- 特定の列の最下行が取得できます。
なので、サクッとマスターして

と答えてあげてください。
動画はこちら
シートはこちら

*クリックすることでシートが開きます。(コピーしてお使いください)
スクリプト
function dvcopy() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
const values = sheet.getRange("B5:C5").getDisplayValues()
console.log(values[0][0])
//F列の最下行を取得
const lastRow = sheet.getRange("F" + sheet.getMaxRows()).getNextDataCell(SpreadsheetApp.Direction.UP).getRow()
console.log(lastRow)
//F列の最下行の日付
const lastDataDisplay = sheet.getRange("F" + lastRow).getDisplayValue()
console.log(lastDataDisplay)
let targetRow = lastRow //書き込む行
if (lastDataDisplay != values[0][0]) { //今日じゃなければ
targetRow++
}
//値の貼り付け
sheet.getRange(targetRow, 6, 1, 2).setValues(values)
}
ポイント
指定の列の最下行を取得する方法
列の最終行を取得します。
getNextDataCell(UP)
表の一番下より、表内の最下行から取得したほうが
コスパが良いのではと思いGeminiに聞いてみました。

const lastRow = sheet.getRange(“F” + sheet.getMaxRows()).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
のgetMaxRowsをgetLastRowにしたほうが良くない?
Gemini の回答
鋭いですね!結論から言うと、**「基本的には getMaxRows() のままの方が安全」**です。
一見すると getLastRow()(データがある最後の行)から上にスキャンした方が効率的に見えますが、実は落とし穴があります。
なぜ getMaxRows()(シートの末尾)から始めるべきか?
例えば、以下のようなシートの状態を想像してみてください。
-
A列:100行目までデータがある(シート全体の
getLastRow()は 100) -
F列:50行目までしかデータがない
① getLastRow() を使った場合
JavaScript
// 行番号 100 (A列の末端) から上にスキャンを開始する
const lastRow = sheet.getRange("F" + sheet.getLastRow())....
もし、たまたまF列の100行目が空欄だった場合、getNextDataCell(UP) は「100行目から上に向かって、最初にデータがあるセル」を探しに行きます。これは正しく 50行目を見つけられるので、一見成功します。
しかし! もし将来的に、誰かが F列の120行目 にだけメモを書き込んだとしたらどうでしょう?
-
シート全体の
getLastRow()は 120 になります。 -
でも、もし他の列(A列など)が 80行目 までしかなかったら?
-
getLastRow()は 120 を返しますが、もしあなたが「他の列の状況」に引きずられてgetLastRow()を開始地点に選ぶと、「F列の本当の末尾より上」から探索を開始してしまうリスクがわずかに残ります。
② getMaxRows()(シートの本当の底)を使った場合
JavaScript
// 行番号 1000 (シート自体の末端) から上にスキャンを開始する
const lastRow = sheet.getRange("F" + sheet.getMaxRows())....
これなら、F列のどこにデータが散らばっていようが、「一番下の壁」から確実に上に向かって全走査するため、F列の本当の最終行を絶対に逃しません。
まとめ
-
getLastRow()を使うと: 他の列のデータ量に依存してしまい、検索開始位置が「F列の本当の末端」より上になってしまう可能性がゼロではない。 -
getMaxRows()を使うと: どんな状況でも「シートの底」から探し始めるので、100%確実にF列の最後を捉えられる。
**「F列の最後を知りたいなら、F列の本当の底(Max)から登る」**のが、GASで最もバグが起きにくい鉄板の書き方です。
最後までご覧いただきありがとうございます。
つぎはこちら



コメント