web-dev-qa-db-ja.com

Googleスプレッドシートの列の最後の空でないセルを取得する

私は次の機能を使用します

=DAYS360(A2, A35)

列の2つの日付の差を計算します。ただし、列は拡大し続けており、現在、スプレッドシートを更新するときに「A35」を手動で変更する必要があります。

この列の最後の空ではないセルを検索し、上記の関数でそのパラメーターを動的に設定する方法はありますか(Googleスプレッドシートで)?

99
MichaelS

もっと雄弁な方法があるかもしれませんが、これは私が思いついた方法です:

列の最後に入力されたセルを見つける関数は次のとおりです。

=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 ) ) ) ) ))
124
Sam Plus Plus

最後の空でないセルを見つけるには、次のような INDEX および MATCH 関数を使用できます。

=DAYS360(A2; INDEX(A:A; MATCH(99^99;A:A; 1)))

これは少し速くて簡単だと思います。

64
xxxbence

A2:Aが連続して日付を含む場合、INDEX(A2:A、COUNT(A2:A))は最後の日付を返します。最終的な式は

=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
41
Rubén

私のお気に入りは:

=INDEX(A2:A,COUNTA(A2:A),1)

そのため、OPの必要性のために:

=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
23
Eric Smalling

私の場合のように、連続して追加された日付のみで列が拡張された場合-最後の日付を取得するためにMAX関数のみを使用しました。

最終的な式は次のとおりです。

=DAYS360(A2; MAX(A2:A)) 
15
Poul

質問はすでに回答されていますが、雄弁な方法があります。

Use just the column name to denote last non-empty row of that column.

例えば:

データがA1:A100にあり、列Aにさらにデータを追加できるようにする場合、たとえばA1:A105または後でA1:A1234にできる場合、この範囲を使用できます。

A1:A
10
Ramazan Polat

最後の値を取得するためのこの式はどうですか:

=index(G:G;max((G:G<>"")*row(G:G)))

そして、これは元のタスクの最終的な式になります。

=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))

最初の日付がG10であるとします。

6
Andrew Anderson

もう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つは、「」と評価される方程式を含めるかどうかを選択できることです。引数が追加されていない場合、「」と評価される方程式はカウントされますが、シートと列を指定すると、それらはカウントされます。また、スクリプトのバリエーションを使用する場合は、柔軟性が非常に高くなります。

おそらくやり過ぎですが、すべて可能です。

4
Mearg

私は別のルートに行きました。行/列に1つずつ何かを追加することがわかっているので、最初にデータのあるフィールドをカウントして最後の行を見つけます。これを列で示します。

=COUNT(A5:A34)

だから、21を返したとしましょう。A5は4行下なので、4行目から21番目の位置を取得する必要があります。私は次のようにinderectを使用してこれを行うことができます:

=INDIRECT("A"&COUNT(A5:A34)+4)

データを含む行の量を検出し、インデックス修飾子として使用している数値を返します。

2
Tamir Nadav

列Aの最新の日付とセルA2の日付の差を計算します。

=MAX(A2:A)-A2
0
Happy Bird