IMPORTTEXT: importar múltiples CSV con LAMBDA recursiva y exploración profunda

Caso doble que combina la resolución de un problema práctico con una exploración exhaustiva de las nuevas funciones IMPORTTEXT e IMPORTCSV de Excel 365.

La comunidad se enfrenta a un problema real: importar y consolidar múltiples archivos CSV con una sola fórmula. El enfoque natural sería usar REDUCE con SECUENCIA para iterar sobre los archivos:

``
=REDUCE("";
SECUENCIA(5);
LAMBDA(_a;_i;
APILARV(_a; IMPORTTEXT("ruta\datos"&_i&".csv";""))
)
)
`

Sin embargo, IMPORTTEXT se "atasca" dentro de REDUCE y SCAN. Nacho descubre que la solución es usar bisección recursiva — una LAMBDA que se llama a sí misma dividiendo el problema a la mitad:

`
=LET(
F; LAMBDA(F;x;
LET(
n; FILAS(x);
SI(n = 1;
IMPORTTEXT("C:\datos\datos" & n & ".csv";";";;;1252);
APILARV(F(F; TOMAR(x; n/2)); F(F; EXCLUIR(x; n/2)))
)
)
);
F(F; SECUENCIA(5))
)
`

John logra hacerlo con REDUCE usando un "empaquetado" con LAMBDA(x;LAMBDA(x)) (thunking) para diferir la evaluación:

`
=LET(
th; LAMBDA(x;LAMBDA(x));
f; MAP(B2:B3; LAMBDA(x; th(IMPORTTEXT(x;;1;;;"en-us"))));
EXCLUIR(REDUCE(0;{1;2}; LAMBDA(a;v; APILARV(a; INDICE(f;v;1)())); 1)
)
`

Por otro lado, Andrés Rojas Moncada realiza una investigación minuciosa sobre el comportamiento interno de IMPORTCSV e IMPORTTEXT: cómo funciona el delimitador por posiciones numéricas, la precedencia entre omitir_filas y tomar_filas que emula EXCLUIR + TOMAR, y las configuraciones regionales disponibles. Descubre que solo 3 de todas las configuraciones regionales de Windows no usan la coma como delimitador por defecto.

Sergio Alejandro Campos (experto de Excel) aporta que incluso se puede combinar con COPILOT:

`
=COPILOT("Dame indicadores"; IMPORTCSV("ruta\archivo.csv"))
`

Aviso (agosto de 2026): Microsoft ha anunciado la retirada de la función COPILOT de Excel, así que esta última combinación con IMPORTCSV deja de ser una vía sobre la que construir a futuro. El resto del caso no se ve afectado: IMPORTTEXT, IMPORTCSV`, la bisección recursiva y el thunking siguen siendo válidos.

El archivo adjunto incluye un ejemplo práctico con un archivo .txt de prueba (datos con separadores |, ; y ,) y la hoja Excel con las fórmulas de importación y una tabla completa de configuraciones regionales.

El problema: importar y consolidar varios CSV con una sola fórmula

Excel 365 estrenó IMPORTTEXT e IMPORTCSV, funciones que leen un archivo de texto directamente desde una fórmula, sin Power Query. La comunidad se planteó el reto natural: importar varios CSV de golpe y apilarlos en una única tabla, todo con fórmulas.

El enfoque intuitivo es iterar con REDUCE sobre una secuencia de números de archivo:

=REDUCE("";
    SECUENCIA(5);
    LAMBDA(_a;_i;
        APILARV(_a; IMPORTTEXT(Ruta&_i&".csv";""))
    )
)

donde Ruta es la ruta de la carpeta más el prefijo del nombre. El problema: IMPORTTEXT se "atasca" dentro de REDUCE y SCAN. Estas funciones de importación no se comportan bien cuando se las evalúa repetidamente dentro de una iteradora, y el resultado no es el esperado.

Solución 1: bisección recursiva (Nacho)

Nacho descubrió que la salida es una LAMBDA que se llama a sí misma dividiendo el problema por la mitad, en lugar de recorrerlo linealmente:

=LET(
    F; LAMBDA(F;x;
        LET(
            n; FILAS(x);
            SI(n = 1;
                IMPORTTEXT(Ruta & n & ".csv"; ";";;;1252);
                APILARV(F(F; TOMAR(x; n/2)); F(F; EXCLUIR(x; n/2)))
            )
        )
    );
    F(F; SECUENCIA(5))
)

La idea: si el bloque de archivos tiene una sola fila (n = 1), importa ese archivo; si tiene más, se parte en dos mitades con TOMAR y EXCLUIR, y cada mitad se resuelve por recursión. Al reducir el problema por bisección, IMPORTTEXT se llama de forma "limpia" en las hojas del árbol y ya no se atasca. El último parámetro (1252) es la página de códigos regional.

Solución 2: thunking con REDUCE (John)

John consiguió que REDUCE funcionara usando una técnica llamada thunking: envolver cada importación en LAMBDA(x;LAMBDA(x)) para diferir su evaluación hasta el momento justo.

=LET(
    th; LAMBDA(x;LAMBDA(x));
    f; MAP(B2:B3; LAMBDA(x; th(IMPORTTEXT(x;;1;;;"en-us"))));
    EXCLUIR(REDUCE(0;{1;2}; LAMBDA(a;v; APILARV(a; INDICE(f;v;1)()))); 1)
)

Cada celda de f no contiene el CSV ya leído, sino una promesa de leerlo (el thunk). REDUCE las va invocando una a una con INDICE(f;v;1)(), y el paréntesis final "despierta" el thunk en ese instante. Así se sortea el atasco sin recursión.

La investigación de Andrés: cómo funciona IMPORTCSV por dentro

Andrés Rojas hizo una exploración minuciosa del comportamiento interno de ambas funciones: cómo se indica el delimitador por posiciones numéricas, cómo la precedencia entre "omitir filas" y "tomar filas" emula un EXCLUIR + TOMAR, y qué configuraciones regionales hay disponibles. Un hallazgo curioso: de todas las configuraciones regionales de Windows, solo tres no usan la coma como delimitador por defecto.

Bonus: combinar con COPILOT

Sergio Alejandro Campos apuntó que la importación se puede encadenar con la nueva función COPILOT para analizar los datos recién leídos en la misma fórmula:

=COPILOT("Dame indicadores"; IMPORTCSV(RutaArchivo))

Funciones clave

  • IMPORTTEXT / IMPORTCSV: leen un archivo de texto o CSV desde una fórmula, con control de delimitador y región.
  • LAMBDA recursiva: la bisección que evita el atasco dentro de las iteradoras.
  • Thunking (LAMBDA(x;LAMBDA(x))): difiere la evaluación para que REDUCE funcione.
  • APILARV / TOMAR / EXCLUIR: apilan y parten los bloques de archivos.

Conclusión

Las funciones de importación de Excel 365 son potentísimas, pero tienen truco cuando quieres iterarlas: no encajan bien en REDUCE o SCAN a las bravas. Las dos vías que funcionan —bisección recursiva o thunking— son patrones avanzados que merece la pena tener en el bolsillo. Exploraciones así, que llegan hasta el detalle de las páginas de códigos regionales, son marca de la casa en la comunidad de InflueXcel.

Más casos con estas funciones

Más contenido de Excel en InflueXcel