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


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

=DAYS360(A2, A35)

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

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

9 65

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)

Итак, для нужд ОП:

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

и для последней строки 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# может быть использовано с косвенной функцией по мере необходимости.