1. ホーム
  2. google-apps-script

[解決済み] 列の最後の値を選択する

2022-10-25 14:59:33

質問

G列にいくつかの値があるスプレッドシートを持っています。いくつかのセルは、間に空白があり、私はその列から別のセルに最後の値を取得する必要があります。

のようなものです。

=LAST(G2:G9999)

ただし LAST は関数ではありません。

どのように解決するのですか?

この方法は、文字列をパラメータとして受け取ります。シートに何行あるか調べます。指定された列のすべての値を取得します。空文字列でない値を見つけるまで、値の端から端までループします。最後に、その値を返します。

スクリプトです。

function lastValue(column) {
  var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
  var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();

  for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
  return values[lastRow - 1];
}

使用方法です。

=lastValue("G")

EDITです。

自動で更新する機能が欲しいというコメントに対して。

私が見つけた最良の方法は、上記のコードでこれを使用することです。

function onEdit(event) {
  SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}

のようなセルで関数を使用する必要はなくなる。 使用方法 セクションで述べられているように、セル内で関数を使用する必要はなくなります。その代わり、更新したいセルと追跡したい列をハードコードすることになります。これを実装するもっと雄弁な方法 (できればハードコードされていないもの) がある可能性もありますが、これが今のところ私が見つけたベストです。

前述のようにセル内の関数を使用する場合、再読み込み時に更新されることに注意してください。おそらく onEdit() にフックして、セル内関数を強制的に更新させる方法があるのかもしれません。ただ、ドキュメントでそれを見つけることができません。