列 G にいくつかの値を含むスプレッドシートがあります。いくつかのセルの間に空のセルがあり、その列の最後の値を別のセルに取得する必要があります。
何かのようなもの:
=LAST(G2:G9999)
ただし、それLAST
は関数ではありません。
列 G にいくつかの値を含むスプレッドシートがあります。いくつかのセルの間に空のセルがあり、その列の最後の値を別のセルに取得する必要があります。
何かのようなもの:
=LAST(G2:G9999)
ただし、それLAST
は関数ではありません。
caligariの回答と同様の回答ですが、列の全範囲を指定するだけで整理できます。
=INDEX(G2:G, COUNT(G2:G))
したがって、このソリューションは文字列をパラメーターとして受け取ります。シート内の行数を見つけます。指定された列のすべての値を取得します。空の文字列ではない値が見つかるまで、値を最後から最初までループします。最後に値を返します。
脚本:
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()
て強制的に更新する方法があります。ドキュメントでそれを見つけることができません。
実際、ここでもっと簡単な解決策を見つけました:
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)))))
範囲内の最後のセルを選択するために、現時点ではLAST()関数は実装されていません。ただし、例に従うと、次のようになります。
=LAST(G2:G9999)
次のように、いくつかの関数INDEX()とCOUNT()を使用して、最後のセルを取得できます。
=INDEX(G2:G; COUNT(G2:G))
同じ問題(シート、セル)を見つけた(そして解決した)スプレッドシートに実例があります。ドキュメント内の他のシートを参照しても完全に機能することに注意してください。Orzamentos
I5
=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) )
テキスト値の列から最後の値を返すには、COUNTA を使用する必要があるため、次の式が必要になります。
=INDEX(G2:G; COUNTA(G2:G))
これは私のために働きます:
=INDEX(I:I;MAX((I:I<>"")*(ROW(I:I))))
これを試して:
=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))
最後の値を探している列が B であるとします。
はい、空白でも機能します。
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ヘルプフォーラムのディスカッションも参照してください:数式を強制的に再計算するにはどうすればよいですか?
以前の回答を見ましたが、頑張りすぎているようです。スクリプトのサポートが単純に改善されたのかもしれません。関数は次のように表現されると思います。
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 つの列の最後のセルを求めていたので、適合しているようです。データがなくなると、おそらく死んでしまいます。
走行距離は異なる場合がありますが、これは私にとってはうまくいきます。
function lastRow(column){
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var lastRow = sheet.getLastRow();
var lastRowRange=sheet.getRange(column+startRow);
return lastRowRange.getValue();
}
ハードコーディングはありません。
これは最後の値を取得し、空の値を処理します:
=INDEX( FILTER( H:H ; NOT(ISBLANK(H:H))) ; ROWS( FILTER( H:H ; NOT(ISBLANK(H:H)) ) ) )
空白のある列では、最後の値を取得できます
=+sort(G:G,row(G:G)*(G:G<>""),)
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.
@Jon_Schneider のコメントに関して、列に空白のセルがある場合はCOUNTA()を使用してください
=INDEX(G2:G; COUNT**A**(G2:G))
別の方法を見つけたので、それがあなたを助けるかもしれません
=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )
-最後の行を返します
anab からの詳細情報: https://groups.google.com/forum/?fromgroups=#!topic/How-to-Documents/if0_fGVINmI