私は次の機能を使用します
=DAYS360(A2, A35)
私の列の2つの日付の差を計算します。ただし、列は拡大し続けており、現在、スプレッドシートを更新するときに「A35」を手動で変更する必要があります。
(Googleスプレッドシートで)この列の最後の空でないセルを見つけて、上記の関数でそのパラメーターを動的に設定する方法はありますか?
私は次の機能を使用します
=DAYS360(A2, A35)
私の列の2つの日付の差を計算します。ただし、列は拡大し続けており、現在、スプレッドシートを更新するときに「A35」を手動で変更する必要があります。
(Googleスプレッドシートで)この列の最後の空でないセルを見つけて、上記の関数でそのパラメーターを動的に設定する方法はありますか?
もっと雄弁な方法があるかもしれませんが、これは私が思いついた方法です:
列の最後に入力されたセルを検索する関数は次のとおりです。
=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 ) ) ) ) ))
A2:Aに連続して日付が含まれている場合、INDEX(A2:A、COUNT(A2:A))は最後の日付を返します。最終的な式は
=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
私のお気に入りは:
=INDEX(A2:A,COUNTA(A2:A),1)
したがって、OPの必要性のために:
=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
質問はすでに答えられていますが、それを行うための雄弁な方法があります。
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
が、右側では生成されます。また、最後の値が範囲の最初の列にあることもわかっているB3:B
ため、のcol
パラメーターはINDEX
1で、row
パラメーターはである必要がありますCOUNTA(B3:B)
。
PS:@bloodymurderliveが最初に書いたので、答えに賛成してください。ここで説明します。
私の場合のように、列が連続して追加された日付によってのみ拡張された場合、MAX関数のみを使用して最終日付を取得しました。
最終的な式は次のようになります。
=DAYS360(A2; MAX(A2:A))
もう1つあります:
=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つは、「」と評価される方程式を含めるかどうかを選択できることです。引数が追加されていない場合、「」に評価される方程式がカウントされますが、シートと列を指定すると、それらがカウントされるようになります。また、スクリプトのバリエーションを使用する場合は、多くの柔軟性があります。
おそらくやり過ぎですが、すべて可能です。
これは私のために働きます。Googleスプレッドシートの列Aの最後の値を取得します。
=index(A:A,max(row(A:A)*(A:A<>"")))
(また、中間の空白行がある場合はスキップします)
これは、拡大し続ける列の最後の値を取得するために私が見つけた最も簡単な解決策のようです。
=INDEX(A:A,COUNTA(A:A),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)
データを含む行の量を検出し、インデックス修飾子として使用している数値を返します。
=ARRAYFORMULA(INDIRECT("A"&MAX(IF(A:A<>"", ROW(A:A), ))))
=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))
列の最後の空でないセルを厳密に見つけるには、これが機能するはずです...
=LOOKUP(2^99, A2:A)
列Aの最新の日付とセルA2の日付の差を計算します。
=MAX(A2:A)-A2
空でない最後の行番号を見つけるために(それらの間に空白を許可する)、以下で列を検索しA
ました。
=ArrayFormula(IFNA(match(2,1/(A:A<>""))))
これにより、最後のセルの内容が表示されます。
=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関数で使用できます。
ベンコリンズはGoogleスプレッドシートの第一人者であり、彼のサイトには無料で多くのヒントがあり、コースも提供しています。彼はダイナミックレンジ名に関する無料の記事を持っており、私はこれを私のプロジェクトの多くの基礎として使用しました。
https://www.benlcollins.com/formula-examples/dynamic-named-ranges/
免責事項、私はベンのサイトを参照することによって得るものは何もありません。
ダイナミックレンジを使用した私のプロジェクトのスクリーンショットは次のとおりです。
セルD3には、配列数式としての場合を除いて、上記の数式があります。
=ArrayFormula(MAX(IF(L2s!A2:A1009<>"",ROW(2:1011))))
セルD4の式は次のとおりです。
="L2s!A2:E"&D3
これはうまくいくかもしれません:
=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A)))