【GAS】特定の列の最下行にセルの値をコピペする方法

基礎講座

GAS基礎講座一覧

ご訪問ありがとうございます。

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)


}

ポイント

 

 

指定の列の最下行を取得する方法

列の最終行を取得します。

sheet.getMaxRows()
そこから上に向かって探しに行く
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で最もバグが起きにくい鉄板の書き方です。

 

 

 

 

最後までご覧いただきありがとうございます。

つぎはこちら

【GAS30】指定した文字列をすべて置換する方法 replace
Googleフォーム登録時の自動返信メールに複数回、登録者の名前を表示させることができるようになります。

 

GAS基礎講座一覧

コメント

タイトルとURLをコピーしました