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

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

=DAYS360(A2, A35)

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

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

9 ответов


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

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

=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 и MATCH функции такой:

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

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


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

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

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

окончательная формула будет иметь вид:

=DAYS360(A2; MAX(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

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

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

и это будет окончательная формула для исходной задачи:

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

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


вот еще один:

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

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

вероятно, излишне, но все возможно.


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