Por qué ELEGIRFILAS falla con índices vacíos o erróneos

Un miembro de la comunidad comparte un problema que a muchos nos ha dado algún dolor de cabeza: intenta usar SI.ND() para manejar errores en una fórmula con ELEGIRFILAS, pero sigue obteniendo errores #VALOR. El problema de fondo es que ELEGIRFILAS es una función "todo o nada": si cualquier índice del array es inválido (vacío, 0 o error), toda la función devuelve error, sin importar que el resto de índices sean correctos.

La comunidad propone varias alternativas según el enfoque:

Solución con BUSCARX (Leo): la más directa, ya que realmente se trata de un problema de búsqueda. Usando el 4º argumento para manejar valores no encontrados:

``
=BUSCARX(K12:K15; L3:L6; K3:K6; "no encontrado")
`

Solución con MAP + LAMBDA (Nacho): envuelve ELEGIRFILAS dentro de MAP para evaluar cada índice individualmente, atrapando el error con SI.ERROR:

`
=MAP(G3#; LAMBDA(x; SI.ERROR(ELEGIRFILAS(D12:D13; x); "")))
`

Explicación técnica y alternativas (John): explica por qué ELEGIRFILAS falla — no tolera ningún índice inválido en el array. Propone un workaround sustituyendo los índices problemáticos por un valor válido (1) y luego limpiando el resultado:

`
=SI(G3#=""; ""; ELEGIRFILAS(D3:D6; SI(G3#=""; 1; G3#)))
`

Y una alternativa más limpia usando CONTAR.SI:

`
=SI(CONTAR.SI(B12:B13; C3:C6); D3:D6; "")
`

Recomendación general (Gerson): cuando el objetivo es buscar un valor en una tabla, BUSCARX es la herramienta adecuada. ELEGIRFILAS` está pensada para seleccionar filas por posición, no para búsquedas. Elegir la función correcta simplifica mucho la fórmula.

El caso es un buen ejemplo de cómo entender las limitaciones de cada función lleva a soluciones más elegantes.

El problema: capturas el error y el error sigue ahí

Un miembro de la comunidad llegó al grupo con una situación que desespera: tenía una fórmula con ELEGIRFILAS, le salía un error de valor, y la envolvió con la función que captura errores de tipo "no disponible" para limpiarlo. No sirvió de nada. El error seguía apareciendo.

La causa no era la función de captura. Era una característica de ELEGIRFILAS que conviene tener muy presente:

ELEGIRFILAS es una función de todo o nada. Si le pasas un array de índices y uno solo de ellos es inválido (vacío, cero o un error), la función entera devuelve error. Da igual que los otros nueve estén perfectos. No devuelve una matriz con nueve resultados buenos y un error; devuelve un único error para todo.

Por eso capturar el error por fuera no arregla nada: no hay nada que salvar dentro. Cuando el resultado ya es un error único, lo único que puedes hacer es sustituirlo entero por otra cosa.

Entendido eso, la solución pasa por evitar que el índice inválido llegue a ELEGIRFILAS, o por no usar ELEGIRFILAS en absoluto. La comunidad propuso las dos vías.

Solución 1: BUSCARX, la que probablemente querías desde el principio

Leo fue directo al grano: si lo que estás haciendo es buscar valores en una tabla, ELEGIRFILAS no es la herramienta.

=BUSCARX(K12:K15; L3:L6; K3:K6; "no encontrado")

BUSCARX tiene un cuarto argumento pensado exactamente para esto: qué devolver cuando no encuentra la coincidencia. Y a diferencia de ELEGIRFILAS, trabaja elemento a elemento: si buscas cuatro valores y uno no aparece, obtienes tres resultados buenos y un "no encontrado" en su sitio.

Una línea, sin capturas de error, sin trucos. Cuando encaja, esta es la respuesta.

Solución 2: MAP para evaluar índice a índice

A veces sí necesitas ELEGIRFILAS de verdad, porque estás seleccionando filas por posición y no buscando valores. En ese caso, Nacho propone romper el "todo o nada" evaluando cada índice por separado:

=MAP(G3#; LAMBDA(x; SI.ERROR(ELEGIRFILAS(D12:D13; x); "")))

MAP recorre el rango derramado de índices y ejecuta el LAMBDA una vez por cada uno. Dentro, ELEGIRFILAS recibe un único índice, así que si ese índice concreto falla, solo falla esa llamada. SI.ERROR la convierte en cadena vacía y el resto sigue funcionando.

Es el patrón general para convertir cualquier función de todo o nada en una función tolerante: si no aguanta un array, dásela de uno en uno con MAP.

Solución 3: sanear los índices antes de pasarlos

John explicó el porqué del fallo y propuso el enfoque contrario: en vez de evaluar de uno en uno, arreglar el array de índices para que no contenga nada inválido.

=SI(G3#=""; ""; ELEGIRFILAS(D3:D6; SI(G3#=""; 1; G3#)))

El SI interior sustituye cada índice vacío por un 1, que siempre es válido. Así ELEGIRFILAS recibe un array limpio y devuelve resultados para todo. El SI exterior se encarga de tapar con cadena vacía las posiciones que correspondían a los índices que habíamos falseado.

Es un poco de trampa (calculas resultados que luego tiras), pero es rápido y evita el coste de MAP cuando el array es grande.

John apuntó además una alternativa más limpia para el caso concreto de "devuélveme el valor solo si la clave existe":

=SI(CONTAR.SI(B12:B13; C3:C6); D3:D6; "")

CONTAR.SI devuelve el número de coincidencias, y cualquier número distinto de cero se comporta como verdadero dentro del SI. Sin errores que capturar, porque nunca llegan a producirse.

La recomendación de fondo

Gerson cerró el hilo con la reflexión más útil: elige la función que corresponde a lo que estás haciendo.

  • BUSCARX está pensada para buscar un valor en una tabla y traer el correspondiente de otra columna. Tolera que no haya coincidencia, por diseño.
  • ELEGIRFILAS está pensada para seleccionar filas por posición. Asume que las posiciones que le das existen, porque en su caso de uso normal las calculas tú.

Cuando el problema es de búsqueda y usas una función de selección, acabas peleándote con errores que en realidad son la función avisándote de que la estás usando fuera de su terreno. Cambiar de función simplifica la fórmula y hace que los errores desaparezcan solos.

Funciones clave

  • ELEGIRFILAS — selecciona filas por posición; falla entera si cualquier índice es inválido.
  • BUSCARX — busca valores con un argumento dedicado para el caso "no encontrado"; trabaja elemento a elemento.
  • MAP con LAMBDA — evalúa uno a uno, convirtiendo funciones de todo o nada en tolerantes a fallos.
  • SI.ERROR — captura el error de una llamada individual, que es donde de verdad sirve.
  • CONTAR.SI — comprobación de existencia sin generar errores; su resultado numérico funciona directamente como condición.

Conclusión

El caso es un buen recordatorio de que muchos errores de Excel no se arreglan añadiendo capas de captura, sino entendiendo cómo se comporta la función por dentro. Saber que ELEGIRFILAS es de todo o nada te ahorra media hora de probar combinaciones de funciones de error que nunca van a funcionar.

Y la moraleja de Gerson vale para casi todo: antes de blindar una fórmula, pregúntate si estás usando la función adecuada. Estos hilos, donde cuatro personas llegan por caminos distintos al mismo sitio, son lo mejor de la comunidad de InflueXcel.

Más casos con estas funciones

Más contenido de Excel en InflueXcel