回答:
もっと雄弁な方法があるかもしれませんが、これは私が思いついた方法です:
列の最後に入力されたセルを見つける関数は次のとおりです。
=INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) )
したがって、これを現在の関数と組み合わせると、次のようになります。
=DAYS360(A2,INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) ))
=INDEX(FILTER(A1:A,NOT(ISBLANK(A1:A))),COUNTA(A1:A))
開始行A1を変更できます)完全な説明:stackoverflow.com/a/27623407/539149
最後の空でないあなたが使用することができ、細胞を見つけるために、INDEX
そしてMATCH
、このような機能を:
=DAYS360(A2; INDEX(A:A; MATCH(99^99;A:A; 1)))
これは少し速くて簡単だと思います。
=DAYS360(A2;VLOOKUP(99^99;A:A;1))
A2:Aが連続して日付を含む場合、INDEX(A2:A、COUNT(A2:A))は最後の日付を返します。最終的な式は
=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
質問はすでに回答されていますが、それを行う雄弁な方法があります。
Use just the column name to denote last non-empty row of that column.
例えば:
データが入ってA1:A100
おり、列Aにさらにデータを追加できるようにしたい場合は、次のようにすることができます。A1:A105
さらに、A1:A1234
後で、この範囲を使用できます。
A1:A
したがって、範囲内の空でない最後の値を取得するには、2つの関数を使用します。
答えは=INDEX(B3:B,COUNTA(B3:B))
です。
ここに説明があります:
COUNTA(range)
範囲内の値の数を返します。これを使用して行数を取得できます。
INDEX(range, row, col)
位置の範囲の値を返すrow
とcol
(col=1
指定されていない場合)
例:
INDEX(A1:C5,1,1) = A1
INDEX(A1:C5,1) = A1 # implicitly states that col = 1
INDEX(A1:C5,1,2) = A2
INDEX(A1:C5,2,1) = B1
INDEX(A1:C5,2,2) = B2
INDEX(A1:C5,3,1) = C1
INDEX(A1:C5,3,2) = C2
上の画像の場合、範囲はになりますB3:B
。したがってB3:B
、COUNTA(B3:B)
最初に範囲内にある値の数を数えます。左側8
では、8つの値があるため生成さ9
れますが、右側で生成されます。最後の値が範囲の1列目にあることもわかっているB3:B
ため、のcol
パラメーターはINDEX
1で、row
パラメーターはでなければなりませんCOUNTA(B3:B)
。
PS:@bloodymurderliveの回答を最初に書いてから、賛成投票をお願いします。ここで説明します。
A1:A
私に列Aの最後の非空のセルの値を与えるものではありません
ここに別のものがあります:
=indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),""))))
最終的な方程式は次のとおりです。
=DAYS360(A2,indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),"")))))
ここでの他の方程式は機能しますが、行番号を簡単に取得できるので、この式が気に入っています。行番号は次のようになります。
=max(arrayformula(if(A:A<>"",row(A:A),"")))
私はもともとスプレッドシートの問題を解決するためにこれだけを見つけようとしましたが、最後のエントリの行番号を示すだけの有用なものを見つけることができなかったので、これが誰かにとって役立つことを願っています。
また、これには、任意のタイプのデータに対して任意の順序で機能するという追加の利点があり、コンテンツを含む行の間に空白行を置くことができ、「」と評価される数式を持つセルはカウントされません。繰り返し値も処理できます。全体としては、ここでmax((G:G <> "")* row(G:G))を使用する方程式に非常に似ていますが、それが目的の場合は行番号を少し簡単に引き出します。
または、スクリプトをシートに配置したい場合は、これを頻繁に実行する予定であれば、自分で簡単に作成できます。ここにそのスクリプトがあります:
function lastRow(sheet,column) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (column == null) {
if (sheet != null) {
var sheet = ss.getSheetByName(sheet);
} else {
var sheet = ss.getActiveSheet();
}
return sheet.getLastRow();
} else {
var sheet = ss.getSheetByName(sheet);
var lastRow = sheet.getLastRow();
var array = sheet.getRange(column + 1 + ':' + column + lastRow).getValues();
for (i=0;i<array.length;i++) {
if (array[i] != '') {
var final = i + 1;
}
}
if (final != null) {
return final;
} else {
return 0;
}
}
}
ここで、現在編集しているシートと同じシートの最後の行が必要な場合は、次のように入力できます。
=LASTROW()
または、そのシートの特定の列、または別のシートの特定の列の最後の行が必要な場合は、以下を実行できます。
=LASTROW("Sheet1","A")
そして一般的に特定のシートの最後の行について:
=LASTROW("Sheet1")
次に、実際のデータを取得するには、間接的に使用することができます。
=INDIRECT("A"&LASTROW())
または、最後の2つの戻り行(実際の列から実際の値を取得するためにシートと列の両方を配置する必要があるため、最後の2行)で上記のスクリプトを変更し、変数を次のように置き換えることができます。
return sheet.getRange(column + final).getValue();
そして
return sheet.getRange(column + lastRow).getValue();
このスクリプトの1つの利点は、 ""と評価される方程式を含めるかどうかを選択できることです。引数が追加されていない場合、「」と評価される方程式がカウントされますが、シートと列を指定すると、それらがカウントされるようになります。また、スクリプトのバリエーションを使用する場合は、柔軟性が非常に高くなります。
おそらくやり過ぎですが、すべて可能です。
最後の値を取得するためのこの式はどうですか?
=index(G:G;max((G:G<>"")*row(G:G)))
そして、これはあなたの元のタスクの最終的な公式になるでしょう:
=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))
最初の日付がG10であるとします。
別のルートに行きました。行/列に1つずつ追加することを知っているので、最初にデータのあるフィールドを数えることで最後の行を見つけます。列でこれを示します。
=COUNT(A5:A34)
つまり、21が返されたとしましょう。A5は4行下なので、4行目から21番目の位置を取得する必要があります。私はこれを次のように無差別に使用できます:
=INDIRECT("A"&COUNT(A5:A34)+4)
データのある行の量を見つけて、インデックス修飾子として使用している数値を返します。
これにより、最後のセルの内容が得られます。
=indirect("A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>""))))
これにより、最後のセルのアドレスが得られます。
="A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))
これにより、最後のセルの行が表示されます。
=max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))
多分あなたはスクリプトを好むでしょう。このスクリプトは、他の誰かが上に投稿した巨大なスクリプトよりもはるかに短いです。
スクリプトエディターに移動して、このスクリプトを保存します。
function getLastRow(range){
while(range.length>0 && range[range.length-1][0]=='') range.pop();
return range.length;
}
これを行うには、セルにこれを入力するだけです。
=getLastRow(A:A)
アマチュアが行う方法は "= CONCATENATE(" A "、COUNTUNIQUE(A1:A9999))"です。ここで、A1は列の最初のセルで、A9999はエントリがあると予想するよりもその列のはるか下にあります。この結果のA#は、必要に応じてINDIRECT関数で使用できます。