
¿Alguien podría decirme la fórmula de Excel para devolver el penúltimo valor de texto de una fila?
Logré encontrar esta fórmula para el último valor de texto: =INDEX(U2:Y2,MATCH(REPT("z",255),U2:Y2))
, pero ¿no estoy seguro de cómo obtengo el penúltimo valor?
Respuesta1
LA FORMULA
Aquí hay un método alternativo para devolver elnorteésimo valor de texto desde el final.
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-COLUMN(U2)+1),"")
Esta fórmula debe ingresarse como una fórmula matricial usando Ctrl+ Shift+ Enteren lugar de simplemente Enter. Sabrá que lo hizo bien si aparecen llaves { } en ambos extremos.
CÓMO FUNCIONA
=IFERROR(...,"")
volverá en blanco si el resto de la fórmula es un error. Recibirá un error `#¡VALOR!# si no hay al menosnortevalores de texto en el rango.
INDEX(U2:Y2,...)
toma la matriz y devuelve algún valor dentro de in. INDEX(U2:Y2,4)
devolvería el cuarto elemento de la matriz que, en este caso, es lo que esté en X2
.
LARGE(..,2)
toma alguna matriz y devuelve el segundo valor más grande dentro de esa matriz. Cambie el 2
a cualquier otro número para obtener elnorteº artículo más grande. La SMALL
función es similar pero devuelve elnortethpequeñísimovalor en su lugar.
ISTEXT(U2:Y2)*COLUMN(U2:Y2)
es la parte que te hace ingresarla como una fórmula matricial. La ISTEXT
función devolverá una matriz de valores TRUE
/ FALSE
si cada celda contiene un valor de texto. Por ejemplo, esto podría ser {TRUE,TRUE,FALSE,FALSE,TRUE}
. La COLUMN
función devuelve el número de columna. En este caso, será {21,22,23,24,25}
. Estos dos se multiplican ( TRUE=1
, FALSE=0
). Para mi ejemplo, la matriz final sería {21,22,0,0,25}
. Introducir esto en la LARGE
fórmula anterior devolvería 22
porque es el segundo valor más grande.
-COLUMN(U2)+1
simplemente ajuste el valor que se ingresa en la INDEX
fórmula para tener en cuenta el hecho de que estamos comenzando en la columna 22 pero la matriz U2:Y2
tiene solo 5 columnas. Queremos devolver un valor entre 1
y 5
, no 21
y 25
.
EJEMPLO
Digamos que tienes los siguientes datos en el rango U2:Y2
:
Hello | World | meep | 5 | boop
El penúltimo valor de texto es meep
así que veamos cómo funciona la fórmula. Voy a completar los cálculos paso a paso. Puedes ver una ejecución similar de esto usando "Evaluar fórmula" en la cinta "Fórmulas", aunque es posible que no esté en el mismo orden.
=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"
Respuesta2
Sospecho que su metodología puede no ser la más eficiente... pero usando lo que ya ha logrado, podría utilizar sus conocimientos actuales MATCH
.restar unopara darle el nuevo límite para buscar y devolver el último texto de esa nueva área. El OFFSET
método le permitirá redefinir el área de búsqueda con su nuevo límite, así:
=INDEX(U2:Y2,MATCH(REPT("z",255),OFFSET(U2,0,0,1,MATCH(REPT("z",255),U2:Y2)-1)))
Respuesta3
=INDEX(D7:P7,MATCH(REPT("z",255),D7:P7)-1)