Obtener la última tarifa (valor más a la derecha) con 5 fórmulas distintas

Un miembro de la comunidad tiene una tabla con tarifas históricas en múltiples columnas (una por período). Necesita obtener automáticamente la tarifa más reciente (la más a la derecha que no sea cero) para cada fila. La comunidad respondió con 5 enfoques distintos, desde los más modernos hasta trucos clásicos.

Nacho propone BYROW + FILTRAR + TOMAR:

``
=BYROW(G4:Q12;LAMBDA(x;LET(
_precios;ENCOL(x);
TOMAR(FILTRAR(_precios;_precios<>0;"Sin tarifas");-1)
)))
`

Convierte cada fila en columna con ENCOL, filtra los ceros y toma el último valor con TOMAR(...;-1).

Leo ofrece una versión más compacta:

`
=BYROW(G4:Q12;LAMBDA(x;TOMAR(FILTRAR(x;x>0);; -1)))
`

Filtra directamente sin convertir a columna y toma la última columna.

Hugo aporta un enfoque con ELEGIRCOLS + FILTRAR + COINCIDIR:

`
=ELEGIRCOLS(FILTRAR(SI(COINCIDIR(0;G9:Q9;0)<>1;
INDICE(G9:Q9;COINCIDIR(0;G9:Q9;0)+1);
INDICE(G9:Q9;COINCIDIR(0;G9:Q9;0)-1));G9:Q9<>0);-1)
`

Usa ELEGIRCOLS con índice -1 para obtener la última columna.

El truco clásico de Hugo con BUSCAR:

`
=BYROW(1/G4:Q12^-1;LAMBDA(f;BUSCAR(9^9;f)))
`

Elegantísimo. Al calcular 1/valor^-1, los ceros generan errores (#DIV/0!). Luego BUSCAR(9^9;f) busca un número enorme y, al no encontrarlo exactamente, devuelve el último valor válido de la fila. Una sola línea sin filtros ni funciones auxiliares.

Y por último, un enfoque con REDUCE acumulador:

`
=BYROW(G4:Q12;LAMBDA(x;REDUCE(;x;LAMBDA(a;v;SI(v>0;v;a)))))
``

Recorre cada valor de la fila: si es mayor que 0, lo guarda; si no, mantiene el anterior. Al final queda el último positivo.

Más contenido de Excel en InflueXcel