Итак, это решение принимает строку в качестве параметра. Он определяет, сколько строк находится на листе. Он получает все значения в указанном столбце. Он просматривает значения от конца до начала, пока не найдет значение, которое не является пустой строкой. Наконец, он возвращает значение.
Сценарий:
function lastValue(column) {
var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();
for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
return values[lastRow - 1];
}
Использование:
=lastValue("G")
РЕДАКТИРОВАТЬ:
В ответ на комментарий с просьбой об автоматическом обновлении функции:
Лучший способ, который я мог найти, - использовать это с приведенным выше кодом:
function onEdit(event) {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}
Больше не нужно будет использовать функцию в ячейке, такой как состояния раздела Использование . Вместо этого вы жестко кодируете ячейку, которую хотите обновить, и столбец, который хотите отслеживать. Возможно, есть более красноречивый способ реализовать это (надеюсь, тот, который не жестко запрограммирован), но это лучшее, что я мог найти на данный момент.
Обратите внимание, что если вы используете функцию в ячейке, как указано ранее, она обновится при перезагрузке. Возможно, есть способ подключиться к onEdit()
функциям ячеек и заставить их обновляться. Я просто не могу найти его в документации.
Tools -> Scripts -> Script editor...
Аналогичный ответ на ответ Калигари , но мы можем привести его в порядок, просто указав полный диапазон столбцов:
источник
FILTER()
диапазоне ed, аналогично ответу @ Geta .COUNT(G2:G)
возвращает 0. Вместо этого используйте,COUNTA(G2:G)
что подсчитывает только количество значений в наборе данных.COUNTA
полезен только в сочетании сINDEX
для получения последнего значения, если между вашими значениями нет ни одного пробела.COUNTA
.COUNT
считает только числовые значения: он вернет 0 при задании, например, текстовых ячеек.На самом деле я нашел здесь более простое решение:
http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=en
Выглядит это так:
источник
ROW
возвращает номер строки, поэтомуFILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) )
возвращает массив всех непустых номеров строк (не их значений), например [1,2, 3, 7, 12, 14]. ЗатемMAX
дает нам номер последней строки.FILTER
Затем применяется второй , чтобы отфильтровать все строки, в которых номер строки не соответствует значениюMAX
(то есть значению последней непустой строки).Функция LAST () в настоящий момент не реализована для выбора последней ячейки в диапазоне. Однако, следуя вашему примеру:
мы можем получить последнюю ячейку, используя пару функций INDEX () и COUNT () следующим образом:
В таблице есть живой пример, где я нашел (и решил) ту же проблему (лист
Orzamentos
, ячейкаI5
). Обратите внимание, что он отлично работает даже со ссылкой на другие листы в документе.источник
COUNTA
в этом случае, если уверены, что между значениями в столбце нет ни одного пробела. Смотрите мои комментарии к ответу dohmoose.:G
обозначает последний элемент? Это задокументировано?Резюме:
Подробности:
Я просмотрел и попробовал несколько ответов, и вот что я нашел: простейшее решение (см. Ответ Dohmoose ) работает, если нет пробелов:
Если у вас есть пробелы, это не удается.
Вы можете обработать один пробел, просто изменив его с
COUNT
наCOUNTA
(см . Ответ user3280071 ):Однако для некоторых комбинаций пробелов это не поможет. (
1 blank 1 blank 1
не подходит для меня.)Следующий код работает (см . Ответ Надера и комментарий Джейсона ):
но это требует размышлений о том, хотите ли вы использовать
COLUMNS
илиROWS
для данного диапазона.Однако, если
COLUMNS
заменить его на,COUNT
я, кажется, получаю надежную, чистую реализациюLAST
:А так
COUNTA
как фильтр встроен, мы можем упростить дальнейшее использованиеЭто несколько просто и правильно. И вам не нужно беспокоиться о том, считать ли строки или столбцы. И в отличие от скриптовых решений, он автоматически обновляется с изменениями в электронной таблице.
А если вы хотите получить последнее значение в строке, просто измените диапазон данных:
источник
Чтобы вернуть последнее значение из столбца текстовых значений, вам нужно использовать COUNTA, поэтому вам понадобится эта формула:
источник
COUNTA
сочетании сINDEX
не будет возвращать последнее значение в столбце.попробуй это:
=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))
Предположим, что столбец, в котором вы ищете последнее значение, - B.
И да, с пробелами работает.
источник
Похоже, что скрипт Google Apps теперь поддерживает диапазоны в качестве параметров функции. Это решение принимает диапазон:
Также см. Обсуждение на справочном форуме Google Apps Script: Как заставить формулы пересчитываться?
источник
Я просмотрел предыдущие ответы, и мне показалось, что они слишком много работают. Возможно, поддержка сценариев просто улучшилась. Я думаю, что функция выражается так:
Затем в своей таблице я использую:
В этой функции я получаю массив значений, по одному на ячейку, на которую указывает ссылка, и это просто выполняет итерацию от конца массива в обратном направлении, пока не найдет непустое значение или не закончатся элементы. Ссылки на листы следует интерпретировать до передачи данных в функцию. Тоже недостаточно навороченный, чтобы справиться с многомерностью. Вопрос действительно касался последней ячейки в одном столбце, поэтому, похоже, он подходит. Он, вероятно, умрет, если у вас закончатся данные.
Ваш пробег может отличаться, но это работает для меня.
источник
нет жесткого кодирования.
источник
У меня работает:
источник
Это получает последнее значение и обрабатывает пустые значения:
источник
=INDEX( FILTER( 88:88 , NOT(ISBLANK(88:88))) , columns( FILTER( 88:88 , NOT(ISBLANK(88:88)) ) ) )
=INDEX( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row())))) , columns( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row()))) ) ) )
В столбце с пробелами последнее значение можно получить с помощью
источник
Ответ
некорректно работает в LibreOffice. Однако с небольшими изменениями работает отлично.
Он всегда работает, только если истинный диапазон меньше, чем
(G2:G10000)
источник
Допустимо ли отвечать на исходный вопрос строго не по теме :) Вы можете написать формулу в электронной таблице, чтобы сделать это. Возможно, некрасиво? но эффективен при нормальной работе с электронной таблицей.
Это предлагается в качестве размышления по ряду вопросов в области скриптов, которые могут быть надежно доставлены с помощью формул массива, преимущество которых заключается в том, что они часто работают аналогичным образом в excel и openoffice.
источник
источник
Я играл с кодом, предоставленным @tinfini, и подумал, что люди могут извлечь выгоду из того, что я считаю немного более элегантным решением (обратите внимание, я не думаю, что скрипты работали точно так же, когда он создавал исходный ответ) ...
При использовании это будет выглядеть так:
источник
Что касается комментария @Jon_Schneider, если в столбце есть пустые ячейки, просто используйте COUNTA ()
источник
Я нашел другой способ, может быть, он тебе поможет
=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )
- вернет последнюю строкуДополнительная информация из анаба здесь: https://groups.google.com/forum/?fromgroups=#!topic/How-to-Documents/if0_fGVINmI
источник
Нашел небольшое изменение, которое помогло устранить пробелы в нижней части таблицы. = индекс (G2: G; СЧЁТЕСЛИ (G2: G; "<>"))
источник
Я удивлен, что никто раньше не давал такого ответа. Но это должно быть самое короткое, и оно даже работает в Excel:
G2:G<>""
создает массив из 1 / истина (1) и 1 / ложь (0). ПосколькуLOOKUP
для поиска используется подход сверху вниз,2
и поскольку он никогда не найдет 2, он подходит к последней непустой строке и дает ее позицию.Другой способ сделать это, как могли бы упомянуть другие, заключается в следующем:
Нахождение
MAX
imumROW
непустой строки и передача его вINDEX
В нулевом пустом массиве прерываний Другой вариант - использовать
INDIRECT
RC
обозначение сCOUNTBLANK
. Если V4: V6 занят записями, то,V18 :
даст позицию V6.
источник
чтобы получить последнее значение из столбца, вы также можете использовать
MAX
функцию сIF
функциейисточник