Получить последнюю непустую ячейку в столбце в Google Таблицах.

Я использую следующую функцию

=DAYS360(A2, A35)

чтобы вычислить разницу между двумя датами в моей колонке. Тем не менее, столбец постоянно расширяется, и теперь я должен вручную изменить "A35" при обновлении таблицы.

Есть ли способ (в Google Таблицах) найти последнюю непустую ячейку в этом столбце и затем динамически установить этот параметр в вышеуказанной функции?

Ответ 1

Может быть более красноречивый способ, но я так понял:

Функция поиска последней заполненной ячейки в столбце:

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

Ответ 2

Чтобы найти последнюю непустую ячейку, вы можете использовать INDEX и MATCH действует следующим образом:

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

Я думаю, что это немного быстрее и проще.

Ответ 3

Если A2: A содержит даты со временем, то INDEX (A2: A, COUNT (A2: A)) вернет последнюю дату. Окончательная формула

=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))

Ответ 4

Мое любимое занятие:

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

Итак, для OP необходимо:

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

Ответ 5

Если столбец расширен только с помощью смежных добавленных дат как в моем случае - я использовал только функцию MAX для получения последней даты.

Конечная формула будет:

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

Ответ 6

Хотя на вопрос уже дан ответ, есть красноречивый способ сделать это.

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

Например:

Если ваши данные находятся в A1:A100, и вы хотите добавить еще несколько данных в столбец A, скажем, это может быть A1:A105 или даже A1:A1234 позже, вы можете использовать этот диапазон:

A1:A

Ответ 7

Как насчет этой формулы для получения последнего значения:

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

И это будет окончательная формула для вашей оригинальной задачи:

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

Предположим, что ваша начальная дата находится в G10.

Ответ 8

Вот еще один:

=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)), но делает вывод номера строки немного проще, если вы хотите,

В качестве альтернативы, если вы хотите разместить скрипт на своем листе, вы можете упростить себе задачу, если планируете делать это много. Вот этот scirpt:

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

или вы можете изменить приведенный выше скрипт в двух последних возвращаемых строках (в последних двух, так как вам нужно будет поместить лист и столбец, чтобы получить фактическое значение из фактического столбца), и заменить переменную следующим:

return sheet.getRange(column + final).getValue();

а также

return sheet.getRange(column + lastRow).getValue();

Одним из преимуществ этого сценария является то, что вы можете выбрать, хотите ли вы включить уравнения, которые оцениваются как "". Если никакие аргументы не добавлены, уравнения, оценивающие "", будут подсчитаны, но если вы укажете лист и столбец, они теперь будут подсчитаны. Кроме того, есть большая гибкость, если вы хотите использовать варианты сценария.

Вероятно, перебор, но все возможно.

Ответ 9

Я пошел другим путем. Поскольку я знаю, что буду добавлять что-то в строку/столбец один за другим, я узнаю последнюю строку, сначала посчитав поля, в которых есть данные. Я продемонстрирую это с помощью колонки:

=COUNT(A5:A34)

Итак, допустим, что вернулось 21. A5 на 4 строки вниз, поэтому мне нужно получить 21-ую позицию от 4-го ряда вниз. Я могу сделать это, используя неопределенный, вот так:

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

Он находит количество строк с данными и возвращает мне число, которое я использую в качестве модификатора индекса.

Ответ 10

Рассчитайте разницу между самой последней датой в столбце A и датой в ячейке A2.

=MAX(A2:A)-A2

Ответ 11

Я на самом деле пытаюсь сделать что-то подобное с денежной стоимостью. Я пытаюсь взять последнее значение из столбца введенных вручную значений и поместить его в простую формулу процента. Для этого я создал ячейку, которая должна принимать последнее значение столбца. Затем я введу это значение в мою формулу процента. Я пропущу первую часть, если смогу найти способ. Но сейчас я даже не могу заставить эту часть работать должным образом.

Ответ 12

для ряда:

=ARRAYFORMULA(INDIRECT("A"&MAX(IF(A:A<>"", ROW(A:A), ))))

для столбца:

=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))

Ответ 13

То, как это делает любитель, = = CONCATENATE ( "A", COUNTUNIQUE (A1: A9999)) ", где A1 является первой ячейкой в ​​столбце, а A9999 находится дальше по этой колонке, чем я когда-либо ожидал любые записи. Этот результирующий A # можно использовать с функцией INDIRECT по мере необходимости.