Кто-нибудь знает формулу для поиска значения последней непустой ячейки в столбце в Microsoft Excel?
excel
worksheet-function
Michaels
источник
источник
Ответы:
Это работает как с текстом, так и с числами и не заботится о том, есть ли пустые ячейки, то есть возвращает последнюю непустую ячейку.
Он должен быть введен в массив , то есть вы нажимаете Ctrl-Shift-Enter после того, как наберете или вставите его. Ниже приведен столбец A:
источник
CELL()
илиOFFSET()
), тогда как тот, который получил больше голосов, возвращает значение, не сообщая вам, где оно находится.Использование следующей простой формулы намного быстрее
Для Excel 2003:
Это дает вам следующие преимущества:
Объяснение:
(A:A<>"")
возвращает массив{TRUE,TRUE,..,FALSE,..}
1/(A:A<>"")
изменяет этот массив на{1,1,..,#DIV/0!,..}
.LOOKUP
ожидает отсортированный массив в порядке возрастания и учитывая, что, еслиLOOKUP
функция не может найти точное совпадение, она выбирает наибольшее значение вlookup_range
(в нашем случае{1,1,..,#DIV/0!,..}
), которое меньше или равно значению (в нашем случае2
), формула находит последнее1
в массиве и возвращает соответствующее значение изresult_range
(третий параметр -A:A
).Также небольшое примечание - приведенная выше формула не учитывает ячейки с ошибками (вы можете увидеть это, только если последняя непустая ячейка имеет ошибку). Если вы хотите учесть их, используйте:
изображение ниже показывает разницу:
источник
LOOKUP
указано, что последний аргументresult_vector
является необязательным. Однако если я его пропущу, я получу очень странный результат, которого не понимаю.LOOKUP
функция не может найтиlookup_value
, функция соответствует наибольшему значениюlookup_vector
, которое меньше или равноlookup_value.
». Если я использую=LOOKUP(2,A:A<>"",A:A)
без генерации#DIV/0!
ошибки1/...
, кажется, что она возвращает какое-то значение в середине вектор. Я не нашел, какова точная функциональность в этом случае.=LOOKUP(2,1/(A:A<>""),ROW(A:A))
но добавлениеROW
функции добавит эффект "волатильности" - формула будет пересчитываться каждый раз, когда любая ячейка в wroksheet изменяетсяВот еще вариант:
=OFFSET($A$1;COUNTA(A:A)-1;0)
источник
COUNTA
вместоCOUNT
). Не говоря уже о пустых ячейках.Вдохновленный великим руководством, данным ответом Дуга Глэнси, я придумал способ сделать то же самое без необходимости в формуле массива. Не спрашивайте меня, почему, но я стараюсь избегать использования формул массива, если это вообще возможно (не по какой-либо конкретной причине, это просто мой стиль).
Вот:
Для поиска последней непустой строки с использованием столбца A в качестве ссылочного столбца
Для поиска последнего непустого столбца с использованием строки 1 в качестве ссылочной строки
Это может быть дополнительно использовано в сочетании с функцией индекса для эффективного определения динамических именованных диапазонов, но это отдельная тема для другого поста, поскольку это не связано с непосредственным вопросом, рассматриваемым здесь.
Я протестировал вышеуказанные методы с Excel 2010 как «изначально», так и в «Режиме совместимости» (для более старых версий Excel), и они работают. Опять же, с ними вам не нужно делать какие-либо Ctrl + Shift + Enter. Используя способ работы sumproduct в Excel, мы можем избавиться от необходимости выполнять операции с массивами, но мы делаем это без формулы массива. Я надеюсь, что кто-то сможет оценить красоту, простоту и элегантность этих предлагаемых решений по дополнительным продуктам так же, как и я. Тем не менее, я не подтверждаю эффективность памяти вышеуказанных решений. Просто они просты, красиво выглядят, помогают по назначению и достаточно гибки, чтобы их можно было использовать для других целей :)
Надеюсь это поможет!
Всего наилучшего!
источник
Я знаю, что это старый вопрос, но я не удовлетворен предоставленными ответами.
LOOKUP, VLOOKUP и HLOOKUP имеют проблемы с производительностью и никогда не должны использоваться.
Функции массива имеют много накладных расходов и могут также иметь проблемы с производительностью, поэтому их следует использовать только в крайнем случае.
COUNT и COUNTA сталкиваются с проблемами, если данные не являются непрерывно непустыми, т.е. у вас есть пробелы, а затем данные снова в рассматриваемом диапазоне
INDIRECT является нестабильным, поэтому его следует использовать только в крайнем случае.
СМЕЩЕНИЕ нестабильно, поэтому его следует использовать только в крайнем случае.
любые ссылки на последнюю строку или столбец (например, 65536-я строка в Excel 2003) не являются надежными и приводят к дополнительным накладным расходам
Это то, что я использую
когда тип данных смешанный:
=max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))
когда известно, что данные содержат только числа:
=MATCH(1E+306,[RANGE],1)
когда известно, что данные содержат только текст:
=MATCH("*",[RANGE],-1)
MATCH имеет наименьшие накладные расходы и энергонезависим, поэтому, если вы работаете с большим количеством данных, это лучше всего использовать.
источник
TRUE
/FALSE
), они останутся незамеченными. Несмотря на то, что этот ответ не является пуленепробиваемым, я все же считаю, что он меньше всего влияет на производительность.=INDEX(N:N,MATCH(1E+306,N:N,1))
Это работает в Excel 2003 (и позже с небольшими изменениями, см. Ниже). Нажмите Ctrl + Shift + Enter (не только Enter), чтобы ввести это как формулу массива.
Имейте в виду, что Excel 2003 не может применить формулу массива ко всему столбцу. Это дает
#NUM!
; возможны непредсказуемые результаты! (EDIT : Противоречивая информация от Microsoft: Та же мая или не может быть правдой о Excel 2007, проблема может быть зафиксирована в 2010 году )Вот почему я применяю формулу массива к диапазону
A1:A65535
и уделяю особое внимание последней ячейке, которая находитсяA65536
в Excel 2003. Не могу просто сказатьA:A
или даже,A1:A65536
как последняя автоматически возвращается кA:A
.Если вы абсолютно уверены
A65536
, что поле пусто, то можете пропустить этуIF
часть:Обратите внимание, что если вы используете Excel 2007 или 2010, номер последней строки - 1048576, а не 65536, поэтому измените указанное выше значение.
Если в середине ваших данных нет пустых ячеек, я бы просто использовал более простую формулу
=INDEX(A:A,COUNTA(A:A))
.источник
=INDEX(19:19,COUNTA(19:19))
Альтернативное решение без формул массива, возможно, более надежное, чем решение в предыдущем ответе с (подсказкой) решение без формул массива , является
См. Этот ответ в качестве примера. Престижность Брэду и Барри Гудини , которые помогли решить этот вопрос .
Возможные причины предпочтения формулы без массива приведены в:
Официальная страница Microsoft (ищите «Недостатки использования формул массива»).
Формулы массива могут показаться волшебными, но у них есть и недостатки:
Ересь формулы массива .
источник
A
вхождения наD
. Что я делаю не так?если вы выполняете поиск в столбце (A), используйте:
если ваш диапазон A1: A10, вы можете использовать:
в этой формуле:
возвращает последний непустой номер строки, а косвенный () возвращает значение ячейки.
источник
=INDEX(A:A, COUNTA(A:A), 1)
взято отсюдаисточник
=MATCH("*";A1:A10;-1)
для текстовых данных=MATCH(0;A1:A10;-1)
для числовых данныхисточник
Я пробовал все энергонезависимые версии, но ни одна из приведенных выше версий не сработала .. excel 2003 / 2007update. Конечно, это можно сделать в Excel 2003. Не в виде массива или стандартной формулы. Я получаю либо пустое сообщение, либо ошибку #value. Поэтому я прибегаю к летучим методам .. Это сработало ..
@Julian Kroné .. Использование ";" вместо "," НЕ работает! Я думаю, вы используете Libre Office, а не MS excel? LOOKUP настолько раздражающе изменчив, что я использую его только в крайнем случае
источник
Поместите этот код в модуль VBA. Сохранить. В разделе «Функции» найдите эту функцию.
источник
для текстовых данных:
для числовых данных:
Это даст вам относительный индекс последней непустой ячейки в выбранном диапазоне (здесь A1: A10).
Если вы хотите получить значение, обращайтесь к нему через КОСВЕННО после создания - текстуально - абсолютной ссылки на ячейку, например:
источник
У меня тоже была такая же проблема. Эта формула также работает одинаково хорошо: -
14 - это номер первой строки в строках, которые вы хотите подсчитать.
Хронический когтистый зуб
источник
Я использовал HLOOKUP
A1
есть свидание;A2:A8
есть прогнозы, сделанные в разное время, мне нужны самые свежиеПри этом используется стандартная формула hlookup с поисковым массивом, определяемым количеством записей.
источник
Если вы знаете, что между ними не будет пустых ячеек, это самый быстрый способ.
Он просто считает непустые ячейки и обращается к соответствующей ячейке.
Его также можно использовать для определенного диапазона.
Это возвращает последнюю непустую ячейку в диапазоне O4: O34.
источник
Для Microsoft Office 2013
«Предпоследняя» непустой строки:
«Последняя» непустая строка:
источник
Эта формула работала со мной для офиса 2010:
= ПРОСМОТР (2; 1 / (A1: A100 <> ""); A1: A100)
A1: первая ячейка A100: ссылка на последнюю ячейку при сравнении
источник
Я думаю, что ответ W5ALIVE наиболее близок к тому, что я использую для поиска последней строки данных в столбце. Предполагая, что я ищу последнюю строку с данными в столбце A, я бы использовал следующее для более общего поиска:
Первое ПОИСКПОЗ найдет последнюю текстовую ячейку, а второе ПОИСКПОЗ - последнюю числовую ячейку. Функция ЕСЛИОШИБКА возвращает ноль, если первое совпадение находит все числовые ячейки или второе совпадение находит все текстовые ячейки.
По сути, это небольшая вариация смешанного решения W5ALIVE для текста и чисел.
При тестировании времени это было значительно быстрее, чем эквивалентные варианты LOOKUP.
Чтобы вернуть фактическое значение этой последней ячейки, я предпочитаю использовать косвенные ссылки на ячейки следующим образом:
Метод, предлагаемый sancho.s, возможно, более чистый вариант, но я бы изменил часть, которая находит номер строки, на это:
единственная разница в том, что ", 1" возвращает первое значение, а ", 0" возвращает весь массив значений (все, кроме одного, не нужны). Я по-прежнему предпочитаю адресовать ячейку к функции индекса, другими словами, возвращая значение ячейки с помощью:
Отличная ветка!
источник
Если вы не боитесь использовать массивы, то вот очень простая формула для решения проблемы:
= СУММ (ЕСЛИ (A: A <> ""; 1,0))
Вы должны нажать CTRL + SHIFT + ENTER, потому что это формула массива.
источник
Простой, который работает для меня:
источник
Хорошо, у меня была та же проблема, что и у спрашивающего, и я попробовал оба основных ответа. Но получаются только ошибки формулы. Оказалось, что мне нужно было поменять "," на ";" чтобы формулы работали. Я использую XL 2007.
Пример:
или
источник
Для отслеживания версий (добавление буквы v в начало числа) я обнаружил, что это хорошо работает в Xcelsius (SAP Dashboards)
источник