Последняя непустая ячейка в столбце
кто-нибудь знает формулу, чтобы найти значение последней непустой ячейки в столбце, в Excel?
23 ответов
это работает как с текстом, так и с числами и не заботится о том, есть ли пустые ячейки, т. е. он вернет последнюю непустую ячейку.
он должен быть введен в массив, т. е. нажмите Ctrl-Shft-Enter после вы вводите или вставляете его. Ниже для столбца A:
=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))
используя следующую простую формулу гораздо быстрее
=LOOKUP(2,1/(A:A<>""),A:A)
Для Excel 2003:
=LOOKUP(2,1/(A1:A65535<>""),A1:A65535)
это дает вам следующие преимущества:
- это не массив формула
- это не летучие формула
объяснение:
-
(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(2,1/(NOT(ISBLANK(A:A))),A:A)
картинка ниже показывает разницу:
вот это:
=SUMPRODUCT(MAX(($A:$A<>"")*(ROW(A:A))))
для поиска последней непустой строки, используя столбец A в качестве ссылочного столбца
=SUMPRODUCT(MAX((:<>"")*(COLUMN(1:1))))
для поиска последнего непустого столбца с помощью строки 1 в качестве ссылочной строки
Это может быть дополнительно использовано в сочетании с функцией индекса для эффективного определения динамических именованных диапазонов, но это что-то для другого поста, поскольку это не связано с непосредственным вопросом, рассмотренным здесь.
я протестировал вышеуказанные методы с Excel 2010, как "изначально", так и в "режиме совместимости" (для более старых версий Excel), и они работают. Опять же, с ними вам не нужно делать ни одного Ctrl + Shift+Enter. Путем leveraging как sumproduct работает в Excel мы можем получить наши руки вокруг необходимости выполнять операции массива, но мы делаем это без формулы массива. Я надеюсь, что кто-то там может оценить красоту, простоту и элегантность этих предлагаемых решений sumproduct так же, как и я. Однако я не подтверждаю эффективность памяти вышеупомянутых решений. Просто они просты, выглядят красиво, помогают по назначению и достаточно гибки, чтобы распространить их использование на другие цели:)
надеюсь, что это помогает!
всего наилучшего!
это работает в Excel 2003 (&позже с незначительным редактированием, см. ниже). Нажмите Ctrl + Shift+Enter (не просто Enter), чтобы ввести это как формулу массива.
=IF(ISBLANK(A65536),INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535)))),A65536)
имейте в виду, что Excel 2003 является можете чтобы применить формулу массива ко всему столбцу. Делаю так дает #NUM!
; непредсказуемые результаты могут произойти! (EDIT: противоречивая информация от Microsoft: то же самое мая или не может быть правдой о Excel 2007; проблемы мая были зафиксированы в 2010 году.)
вот почему я применяю формулу массива к range A1:A65535
и дать специальное лечение последней клетке, которая A65536
в Excel 2003. Не могу просто сказать A:A
или даже A1:A65536
как последний автоматически возвращается к A:A
.
если вы абсолютно уверены A65536
пустое, тогда вы можете пропустить IF
детали:
=INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535))))
обратите внимание, что если вы используете Excel 2007 или 2010, последняя строка номер 1048576 не 65536, поэтому отрегулируйте выше по мере необходимости.
если в середине ваших данных нет пустых ячеек, то я бы просто использовал более простую формулу,=INDEX(A:A,COUNTA(A:A))
.
Я знаю, что этот вопрос старый, но я не удовлетворен предоставленными ответами.
LOOKUP, VLOOKUP и HLOOKUP имеют проблемы с производительностью и никогда не должны использоваться.
функции массива имеют много накладных расходов, а также могут иметь проблемы с производительностью, поэтому его следует использовать только в крайнем случае.
COUNT и COUNTA сталкиваются с проблемами, если данные не являются непрерывными непустыми, т. е. у вас есть пробелы и затем данные снова в диапазоне, о котором идет речь
непрямой является изменчивым, поэтому он должен использоваться только в крайнем случае
смещение изменчиво, поэтому его следует использовать только в крайнем случае
любые ссылки на последнюю строку или столбец (например, 65536-я строка в Excel 2003) не являются надежными и приводят к дополнительным накладным расходам
Это то, что я использую
когда тип данных-смешанный:
=max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))
когда известно, что данные содержат только цифры:
=MATCH(1E+306,[RANGE],1)
когда известно, что данные содержат только текст:
=MATCH("*",[RANGE],-1)
матч имеет самые низкие накладные расходы и энергонезависим, поэтому, если вы работаете с большим количеством данных, это лучше всего использовать.
альтернативное решение без формул массива, возможно более надежной, чем предыдущий ответ с (подсказкой к) решению без формул массива, is
=INDEX(A:A,INDEX(MAX(($A:$A<>"")*(ROW(A:A))),0))
посмотреть ответ в качестве примера. Слава бред и Барри Гудини, кто помог решить этот вопрос.
приведены возможные причины предпочтения формулы без массива в:
-
официальная страница Microsoft (ищите "недостатки использования формул массива").
Формулы массива могут казаться волшебными, но они также имеют некоторые недостатки:- иногда вы можете забыть нажать CTRL + SHIFT+ENTER. Не забудьте нажать эту комбинацию клавиш при вводе или редактировании формулы массива.
- другие пользователи могут не понять ваши формулы. Формулы массива относительно недокументированы, поэтому если другие люди нуждаются в изменении книг, следует либо избегать формул массива, либо убедиться, что эти пользователи понимают, как их изменить.
- в зависимости от скорости обработки и памяти вашего компьютера, формулы большого массива могут замедлить вычисления.
Ive пробовал все энергонезависимые версии, но ни одна версия, приведенная выше, не работала.. excel 2003 / 2007update. Конечно, это можно сделать в Excel 2003. Не как массив или стандартная формула. Я либо получаю пустую ошибку, 0 или #value. Поэтому я прибегаю к изменчивым методам .. Это сработало..
=поиск (2,1/(T4: T369""), T4: T369)
@Julian Kroné .. Использование "; "вместо", " не работает! Я думаю, вы используете Libre Office, а не MS excel? УВАЖАТЬ настолько раздражающе волевой, что я использую его только в крайнем случае
поместите этот код в модуль VBA. Спасать. В разделе функции, определяемые пользователем, найдите эту функцию.
Function LastNonBlankCell(Range As Excel.Range) As Variant
Application.Volatile
LastNonBlankCell = Range.End(xlDown).Value
End Function
для текстовых данных:
EQUIV("";A1:A10;-1)
для числовых данных:
EQUIV(0;A1:A10;-1)
Это дает вам относительный индекс последней непустой ячейки в выбранном диапазоне (здесь A1:A10).
Если вы хотите получить значение, получите к нему доступ через косвенный после построения-текстуально-абсолютная ссылка на ячейку, например:
INDIRECT("A" & (nb_line_where_your_data_start + EQUIV(...) - 1))
У меня тоже такая же проблема. Эта формула также работает одинаково хорошо:-
=INDIRECT(CONCATENATE("$G$",(14+(COUNTA($G:$G535)-1))))
14 - номер строки первой строки в строках, которые вы хотите подсчитать.
Хронический Clawtooth
я использовал HLOOKUP
A1
свидание;
A2:A8
есть прогнозы, захваченные в разное время, я хочу последний
=Hlookup(a1,a1:a8,count(a2:a8)+1)
используется стандартная формула hlookup с массивом поиска, определяемым количеством записей.
Если вы знаете, что между ними не будет пустых ячеек, самый быстрый способ-это.
=INDIRECT("O"&(COUNT(O:O,"<>""")))
Он просто подсчитывает непустые ячейки и ссылается на соответствующую ячейку.
его можно использовать для специфического ряда также.
=INDIRECT("O"&(COUNT(O4:O34,"<>""")+3))
Это возвращает последнюю непустую ячейку в диапазоне O4: O34.
для Microsoft office 2013
"последний, но один" из непустой строки:
=OFFSET(Sheet5!$C,COUNTA(Sheet5!$C:$C)-2,0)
"последняя" непустая строка:
=OFFSET(Sheet5!$C,COUNTA(Sheet5!$C:$C)-1,0)
эта формула работала со мной для Office 2010:
=поиск (2;1/(A1: A100""); A1:A100)
A1: первая ячейка A100: обратитесь к последней ячейке в comparing
Я думаю, что ответ от W5ALIVE ближе всего к тому, что я использую, чтобы найти последнюю строку данных в столбце. Предполагая, что я ищу последнюю строку с данными в столбце A, я бы использовал следующее Для более общего поиска:
=MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0))
первый матч найдет последнюю текстовую ячейку, а второй матч найдет последнюю числовую ячейку. Функция IFERROR возвращает ноль, если первое совпадение находит все числовые ячейки или если второе совпадение находит весь текст ячейки.
в основном это небольшое изменение смешанного текста и числового решения W5ALIVE.
при тестировании времени это было значительно быстрее, чем эквивалентные варианты поиска.
чтобы вернуть фактическое значение этой последней ячейки, я предпочитаю использовать косвенную ссылку на ячейку следующим образом:
=INDIRECT("A"&MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0)))
метод, предложенный Санчо.s, возможно, более чистый вариант, но я бы изменил часть, которая находит номер строки на это:
=INDEX(MAX((A:A<>"")*(ROW(A:A))),1)
единственная разница в том,что", 1" возвращает первое значение, а", 0" возвращает весь массив значений (все, кроме одного, которые не нужны). Я по-прежнему предпочитаю адресовать ячейку индексной функции там, другими словами, возвращая значение ячейки с:
=INDIRECT("A"&INDEX(MAX((A:A<>"")*(ROW(A:A))),1))
большой поток!
Если вы не боитесь использовать массивы, то следующая очень простая формула для решения проблемы:
=SUM (IF (A:A"",1,0))
вы должны нажать CTRL + SHIFT + ENTER, потому что это формула массива.
Если вы ищете в столбце (A), используйте :
=INDIRECT("A" & SUMPRODUCT(MAX((A:A<>"")*(ROW(A:A)))))
Если ваш диапазон A1: A10, вы можете использовать:
=INDIRECT("A" & SUMPRODUCT(MAX(($A:$A10<>"")*(ROW($A:$A10)))))
в этой формуле :
SUMPRODUCT(MAX(($A:$A10<>"")*(ROW($A:$A10))))
возвращает последний незаполненный номер строки, а indirect() возвращает значение ячейки.
хорошо, поэтому у меня была та же проблема, что и у asker, и я попробовал оба ответа. Но только получение ошибок формулы. Оказалось, что мне нужно было обменять "," на ";" для того, чтобы формулы работали. Я использую XL 2007.
пример:
=LOOKUP(2;1/(A:A<>"");A:A)
или
=INDEX(A:A;MAX((A:A<>"")*(ROW(A:A))))
для отслеживания версий (добавление буквы v в начало числа) я нашел, что это хорошо работает в Xcelsius (SAP Dashboards)
="v"&MAX(A2:A500)