
Может ли кто-нибудь подсказать мне формулу Excel, возвращающую предпоследнее текстовое значение в строке?
Мне удалось найти эту формулу для последнего текстового значения: =INDEX(U2:Y2,MATCH(REPT("z",255),U2:Y2))
, но не уверен, как получить предпоследнее значение?
решение1
ФОРМУЛА
Вот альтернативный метод возвратан-ое текстовое значение с конца.
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-COLUMN(U2)+1),"")
Эту формулу необходимо ввести как формулу массива, используя Ctrl+ Shift+ Enterвместо просто Enter. Вы поймете, что сделали все правильно, если на обоих концах появятся фигурные скобки { }.
КАК ЭТО РАБОТАЕТ
=IFERROR(...,"")
вернет пустое значение, если остальная часть формулы является ошибкой. Вы получите ошибку `#ЗНАЧЕНИЕ!#, если нет хотя бынтекстовые значения в диапазоне.
INDEX(U2:Y2,...)
принимает массив и возвращает некоторое значение внутри in. INDEX(U2:Y2,4)
вернет 4-й элемент массива, который в данном случае является тем, что находится в X2
.
LARGE(..,2)
принимает некоторый массив и возвращает второе по величине значение из этого массива. Измените 2
на любое другое число, чтобы получитьнth наибольший элемент. SMALL
Функция похожа, но возвращаетнйнаименьшийвместо этого ценность.
ISTEXT(U2:Y2)*COLUMN(U2:Y2)
— это часть, которая заставляет вас вводить ее как формулу массива. Функция ISTEXT
вернет массив значений TRUE
/ FALSE
для того, содержит ли каждая ячейка текстовое значение. Например, это может быть {TRUE,TRUE,FALSE,FALSE,TRUE}
. COLUMN
Функции возвращают номер столбца. В этом случае это будет {21,22,23,24,25}
. Эти два значения умножаются ( TRUE=1
, FALSE=0
). Для моего примера окончательный массив будет {21,22,0,0,25}
. Подстановка этого в LARGE
формулу из предыдущего примера вернет , 22
потому что это второе по величине значение.
-COLUMN(U2)+1
просто скорректируйте значение, вставленное в INDEX
формулу, чтобы учесть тот факт, что мы начинаем со столбца 22, но в массиве U2:Y2
всего 5 столбцов. Мы хотим вернуть значение между 1
и 5
, а не 21
и 25
.
ПРИМЕР
Допустим, у вас есть следующие данные в диапазоне U2:Y2
:
Hello | World | meep | 5 | boop
Предпоследнее текстовое значение — meep
так что давайте посмотрим, как работает формула. Я собираюсь заполнить вычисления по одному шагу за раз. Вы можете увидеть похожий прогон этого с помощью «Вычислить формулу» на ленте «Формулы», хотя порядок может быть и не таким.
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-COLUMN(U2)+1),"")
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-21+1),"")
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-20),"")
=IFERROR(INDEX(U2:Y2,LARGE({TRUE,TRUE,TRUE,FALSE,TRUE}*COLUMN(U2:Y2),2)-21),"")
=IFERROR(INDEX(U2:Y2,LARGE({TRUE,TRUE,TRUE,FALSE,TRUE}*{21,22,23,24,25},2)-21),"")
=IFERROR(INDEX(U2:Y2,LARGE({21,22,23,0,25},2)-21),"")
=IFERROR(INDEX(U2:Y2,23-21),"")
=IFERROR(INDEX(U2:Y2,2),"")
=IFERROR(INDEX({"Hello","World","meep",5,"boop"},2),"")
=IFERROR("meep","")
="meep"
решение2
Я подозреваю, что ваша методология может быть не самой эффективной... но используя то, чего вы уже достигли, вы могли бы использовать свои существующие MATCH
,вычесть одинчтобы дать вам новую границу для поиска и вернуть последний текст из этой новой области. Метод OFFSET
позволит вам переопределить область поиска с вашим новым пределом, например так:
=INDEX(U2:Y2,MATCH(REPT("z",255),OFFSET(U2,0,0,1,MATCH(REPT("z",255),U2:Y2)-1)))
решение3
=INDEX(D7:P7,MATCH(REPT("z",255),D7:P7)-1)