108

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

何かのようなもの:

=LAST(G2:G9999)

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

4

23 に答える 23

167

caligariの回答と同様の回答ですが、列の全範囲を指定するだけで整理できます。

=INDEX(G2:G, COUNT(G2:G))
于 2012-12-14T00:41:53.333 に答える
55

したがって、このソリューションは文字列をパラメーターとして受け取ります。シート内の行数を見つけます。指定された列のすべての値を取得します。空の文字列ではない値が見つかるまで、値を最後から最初までループします。最後に値を返します。

脚本:

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")

編集:

関数を自動的に更新するように求めるコメントへの応答:

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

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

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

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

于 2010-11-18T19:37:04.887 に答える
53

実際、ここでもっと簡単な解決策を見つけました:

http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=ja

次のようになります。

=FILTER( A10:A100 , ROW(A10:A100) =MAX( FILTER( ArrayFormula(ROW(A10:A100)) , NOT(ISBLANK(A10:A100)))))
于 2011-02-18T15:07:59.880 に答える
44

範囲内の最後のセルを選択するために、現時点ではLAST()関数は実装されていません。ただし、例に従うと、次のようになります。

=LAST(G2:G9999)

次のように、いくつかの関数INDEX()COUNT()を使用して、最後のセルを取得できます。

=INDEX(G2:G; COUNT(G2:G))

同じ問題(シート、セル)を見つけた(そして解決した)スプレッドシートに実例があります。ドキュメント内の他のシートを参照しても完全に機能することに注意してください。OrzamentosI5

于 2012-11-13T07:21:49.410 に答える
38

概要:

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )

詳細:

私はいくつかの答えを調べて試しましたが、ここに私が見つけたものがあります:最も簡単な解決策( Dohmooseの答えを参照)は、空白がない場合に機能します:

=INDEX(G2:G; COUNT(G2:G))

空白がある場合は失敗します。

COUNTからに変更するだけで、1 つの空白を処理できますCOUNTA ( user3280071 の回答を参照)。

=INDEX(G2:G; COUNTA(G2:G))

ただし、これはブランクの組み合わせによっては失敗します。(1 blank 1 blank 1私には失敗します。)

次のコードが機能します ( Nader の回答jason のコメントを参照してください)。

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , ROWS( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) )

COLUMNSただし、使用するか、特定の範囲を使用するかを考える必要がありROWSます。

ただし、次のようCOLUMNSに置き換えた場合COUNT、次の信頼性の高い空白のない実装が得られるようですLAST

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNT( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) ) 

またCOUNTA、フィルターが組み込まれているため、使用してさらに単純化できます

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )

これはやや単純で正しいです。また、行と列のどちらをカウントするかを気にする必要はありません。また、スクリプト ソリューションとは異なり、スプレッドシートに変更が加えられると自動的に更新されます。

行の最後の値を取得したい場合は、データ範囲を変更するだけです。

=INDEX( FILTER( A2:2 , NOT(ISBLANK(A2:2))) , COUNTA(A2:2) )
于 2014-12-23T15:32:43.413 に答える
9

テキスト値の列から最後の値を返すには、COUNTA を使用する必要があるため、次の式が必要になります。

=INDEX(G2:G; COUNTA(G2:G))
于 2014-02-06T14:52:29.683 に答える
7

これは私のために働きます:

=INDEX(I:I;MAX((I:I<>"")*(ROW(I:I))))
于 2015-01-31T15:40:24.547 に答える
7

これを試して: =INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))

最後の値を探している列が B であるとします。

はい、空白でも機能します。

于 2015-09-21T21:17:06.060 に答える
6

GoogleAppsScriptが関数パラメータとして範囲をサポートするようになりました。このソリューションは、次の範囲を受け入れます。

// Returns row number with the last non-blank value in a column, or the first row
//   number if all are blank.
// Example: =rowWithLastValue(a2:a, 2)
// Arguments
//   range: Spreadsheet range.
//   firstRow: Row number of first row. It would be nice to pull this out of
//     the range parameter, but the information is not available.
function rowWithLastValue(range, firstRow) {
  // range is passed as an array of values from the indicated spreadsheet cells.
  for (var i = range.length - 1;  i >= 0;  -- i) {
    if (range[i] != "")  return i + firstRow;
  }
  return firstRow;
}

Google Apps Scriptヘルプフォーラムのディスカッションも参照してください:数式を強制的に再計算するにはどうすればよいですか?

于 2011-11-27T01:42:18.693 に答える
6

以前の回答を見ましたが、頑張りすぎているようです。スクリプトのサポートが単純に改善されたのかもしれません。関数は次のように表現されると思います。

function lastValue(myRange) {
    lastRow = myRange.length;
    for (; myRange[lastRow - 1] == "" && lastRow > 0; lastRow--)
    { /*nothing to do*/ }
    return myRange[lastRow - 1];
}

私のスプレッドシートでは、次を使用します。

= lastValue(E17:E999)

関数では、参照されるセルごとに 1 つの値の配列を取得します。これは、空でない値が見つかるか、要素がなくなるまで、配列の最後から逆方向に反復されます。シート参照は、データが関数に渡される前に解釈する必要があります。多次元を処理するほど派手でもありません。質問は 1 つの列の最後のセルを求めていたので、適合しているようです。データがなくなると、おそらく死んでしまいます。

走行距離は異なる場合がありますが、これは私にとってはうまくいきます。

于 2014-02-19T04:04:15.877 に答える
5
function lastRow(column){
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var lastRow = sheet.getLastRow();
  var lastRowRange=sheet.getRange(column+startRow);
  return lastRowRange.getValue();
}

ハードコーディングはありません。

于 2012-06-14T19:10:24.237 に答える
5

これは最後の値を取得し、空の値を処理します:

=INDEX(  FILTER( H:H ; NOT(ISBLANK(H:H))) ; ROWS( FILTER( H:H ; NOT(ISBLANK(H:H)) ) ) )
于 2014-04-01T23:28:24.310 に答える
4

空白のある列では、最後の値を取得できます

=+sort(G:G,row(G:G)*(G:G<>""),)
于 2015-11-20T14:32:27.643 に答える
3

Is it acceptable to answer the original question with a strictly off topic answer:) You can write a formula in the spreadsheet to do this. Ugly perhaps? but effective in the normal operating of a spreadsheet.

=indirect("R"&ArrayFormula(max((G:G<>"")*row(G:G)))&"C"&7)


(G:G<>"") gives an array of true false values representing non-empty/empty cells
(G:G<>"")*row(G:G) gives an array of row numbers with zeros where cell is empty
max((G:G<>"")*row(G:G)) is the last non-empty cell in G

This is offered as a thought for a range of questions in the script area that could be delivered reliably with array formulas which have the advantage of often working in similar fashion in excel and openoffice.

于 2012-08-09T05:09:20.450 に答える
2

@Jon_Schneider のコメントに関して、列に空白のセルがある場合はCOUNTA()を使用してください

=INDEX(G2:G; COUNT**A**(G2:G))
于 2013-10-08T12:27:03.290 に答える
2

別の方法を見つけたので、それがあなたを助けるかもしれません

=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )-最後の行を返します

anab からの詳細情報: https://groups.google.com/forum/?fromgroups=#!topic/How-to-Documents/if0_fGVINmI

于 2012-10-24T06:31:43.267 に答える