Excel: buscar y sustituir varios valores a la vez

  • Compartir Este
Michael Brown

En este tutorial, veremos varias formas de buscar y reemplazar varias palabras, cadenas o caracteres individuales, para que puedas elegir la que mejor se adapte a tus necesidades.

¿Cómo suele buscar la gente en Excel? En la mayoría de los casos, utilizando la función Buscar y reemplazar, que funciona bien para valores individuales. Pero, ¿qué pasa si tienes decenas o incluso cientos de elementos que reemplazar? Seguramente, nadie querría hacer todos esos reemplazos manualmente uno por uno, y luego volver a hacerlo todo de nuevo cuando los datos cambian. Por suerte, hay algunos métodos más eficaces para hacer reemplazos masivos en Excel, yvamos a investigar cada uno de ellos en detalle.

    Buscar y reemplazar varios valores con SUBSTITUTE anidado

    La forma más sencilla de buscar y sustituir varias entradas en Excel es utilizar la función SUSTITUIR.

    La lógica de la fórmula es muy sencilla: se escriben unas cuantas funciones individuales para sustituir un valor antiguo por otro nuevo y, a continuación, se anidan esas funciones una dentro de otra, de forma que cada SUBSTITUTE posterior utilice la salida del SUBSTITUTE anterior para buscar el siguiente valor.

    SUSTITUTO(SUSTITUTO(SUSTITUTO( texto , texto_antiguo1 , nuevo_texto1 ), texto_antiguo2 , nuevo_texto2 ), texto_antiguo3 , nuevo_texto3 )

    En la lista de ubicaciones de A2:A10, supongamos que desea sustituir los nombres abreviados de los países (como FR , REINO UNIDO y EE.UU. ) con los nombres completos.

    Para ello, introduzca los valores antiguos en D2:D4 y los nuevos en E2:E4 como se muestra en la captura de pantalla siguiente. A continuación, introduzca la fórmula siguiente en B2 y pulse Intro:

    =SUSTITUIR(SUSTITUIR(SUSTITUIR(A2:A10, D2, E2), D3, E3), D4, E4)

    ...y tendrás todas las sustituciones hechas a la vez:

    Tenga en cuenta que este método sólo funciona en Excel 365 que admite matrices dinámicas.

    En las versiones predinámicas de Excel 2019, Excel 2016 y anteriores, es necesario escribir la fórmula para la celda superior (B2) y, a continuación, copiarla en las celdas inferiores:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)

    Preste atención a que, en este caso, bloqueamos los valores de sustitución con referencias de celda absolutas, para que no se desplacen al copiar la fórmula hacia abajo.

    Nota: La función SUBSTITUTE es distingue entre mayúsculas y minúsculas lo que significa que debe escribir los valores antiguos ( texto_antiguo ) con las mismas letras que aparecen en los datos originales.

    Por muy fácil que pueda resultar, este método tiene un inconveniente importante: cuando se tienen docenas de elementos que sustituir, las funciones anidadas se vuelven bastante difíciles de gestionar.

    Ventajas Fácil de aplicar; compatible con todas las versiones de Excel

    Inconvenientes La mejor forma de utilizarlo es para un número limitado de valores de búsqueda/sustitución.

    Buscar y reemplazar varias entradas con XLOOKUP

    En caso de que desee sustituir el contenido completo de la celda no su parte, la función XLOOKUP resulta muy útil.

    Supongamos que tiene una lista de países en la columna A y desea sustituir todas las abreviaturas por los nombres completos correspondientes. Al igual que en el ejemplo anterior, empiece introduciendo los elementos "Buscar" y "Reemplazar" en columnas separadas (D y E respectivamente) y, a continuación, introduzca esta fórmula en B2:

    =XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)

    Traducido del lenguaje Excel al lenguaje humano, esto es lo que hace la fórmula:

    Busca el valor A2 (lookup_value) en D2:D4 (lookup_array) y devuelve una coincidencia de E2:E4 (return_array). Si no se encuentra, extrae el valor original de A2.

    Haz doble clic en el tirador de relleno para que la fórmula se copie en las celdas de abajo y el resultado no te haga esperar:

    Dado que la función XLOOKUP sólo está disponible en Excel 365, la fórmula anterior no funcionará en versiones anteriores. Sin embargo, puede imitar fácilmente este comportamiento con una combinación de IFERROR o IFNA y VLOOKUP:

    =IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)

    Nota: A diferencia de SUBSTITUTE, las funciones XLOOKUP y VLOOKUP son no distingue mayúsculas de minúsculas es decir, buscan los valores de búsqueda sin tener en cuenta las mayúsculas y minúsculas. Por ejemplo, nuestra fórmula sustituiría tanto a FR y fr con Francia .

    Ventajas : uso inusual de las funciones habituales; funciona en todas las versiones de Excel

    Inconvenientes funciona a nivel de celda, no puede sustituir parte del contenido de la celda

    Sustitución múltiple mediante la función recursiva LAMBDA

    Para los suscriptores de Microsoft 365, Excel proporciona una función especial que permite crear funciones personalizadas utilizando un lenguaje de fórmulas tradicional. Sí, estoy hablando de LAMBDA. Lo bueno de este método es que puede convertir una fórmula muy larga y compleja en una muy compacta y sencilla. Además, permite crear funciones propias que no existen en Excel, algo que antes erasólo es posible con VBA.

    Para obtener información detallada sobre la creación y el uso de funciones LAMBDA personalizadas, consulte este tutorial: Cómo escribir funciones LAMBDA en Excel. A continuación, comentaremos un par de ejemplos prácticos.

    Ventajas el resultado es una función elegante y sorprendentemente sencilla de utilizar, independientemente del número de pares de sustitución

    Inconvenientes Disponible sólo en Excel 365; específico del libro de trabajo y no reutilizable en diferentes libros de trabajo.

    Ejemplo 1. Buscar y sustituir varias palabras / cadenas a la vez

    Para sustituir varias palabras o texto de una sola vez, hemos creado una función LAMBDA personalizada, denominada MultiReplace que puede adoptar una de estas formas:

    =LAMBDA(texto, antiguo, nuevo, IF(antiguo"", MultiReplace(SUBSTITUTE(texto, antiguo, nuevo), OFFSET(antiguo, 1, 0), OFFSET(nuevo, 1, 0)), texto))

    O

    =LAMBDA(texto, antiguo, nuevo, IF(antiguo="", texto, MultiReplace(SUBSTITUTE(texto, antiguo, nuevo), OFFSET(antiguo, 1, 0), OFFSET(nuevo, 1, 0))))

    Ambas son funciones recursivas que se llaman a sí mismas. La diferencia estriba únicamente en cómo se establece el punto de salida.

    En la primera fórmula, la función IF comprueba si el antiguo no está vacía (old""). Si es TRUE, la lista MultiReplace Si es FALSE, la función devuelve texto su forma actual y sale.

    La segunda fórmula utiliza la lógica inversa: si antiguo está en blanco (old=""), entonces devuelve texto y salga; en caso contrario, llame a MultiReplace .

    La parte más complicada ya está hecha! Lo que te queda por hacer es nombrar el MultiReplace Para obtener información detallada, consulte Cómo asignar un nombre a una función LAMBDA.

    Una vez que la función recibe un nombre, puede utilizarla como cualquier otra función incorporada.

    Cualquiera de las dos variantes de fórmula que elija, desde la perspectiva del usuario final, la sintaxis es así de sencilla:

    MultiReplace(texto, antiguo, nuevo)

    Dónde:

    • Texto - los datos de origen
    • Antiguo - los valores a encontrar
    • Nuevo - los valores a sustituir por

    Siguiendo con el ejemplo anterior, vamos a sustituir no sólo las abreviaturas de los países, sino también las de los estados. Para ello, escriba las abreviaturas ( antiguo ) en la columna D a partir de D2 y los nombres completos ( nuevo valores) en la columna E a partir de E2.

    En B2, introduzca la función MultiReplace:

    =MultiReplace(A2:A10, D2, E2)

    Pulsa Intro y disfruta de los resultados :)

    Cómo funciona esta fórmula

    La clave para entender la fórmula es entender la recursividad. Esto puede sonar complicado, pero el principio es bastante simple. Con cada iteración, una función recursiva resuelve una pequeña instancia de un problema mayor. En nuestro caso, la función MultiReplace realiza un bucle entre los valores antiguos y los nuevos y, en cada bucle, realiza una sustitución:

    MultiReplace (SUBSTITUTE(texto, antiguo, nuevo), OFFSET(antiguo, 1, 0), OFFSET(nuevo, 1, 0))

    Al igual que con las funciones SUBSTITUTE anidadas, el resultado del SUBSTITUTE anterior se convierte en la función texto para el siguiente SUBSTITUTE. En otras palabras, en cada llamada subsiguiente de MultiReplace la función SUBSTITUTE no procesa la cadena de texto original, sino la salida de la llamada anterior.

    Para gestionar todos los elementos del antiguo empezamos por la celda superior y utilizamos la función OFFSET para desplazarnos 1 fila hacia abajo con cada interacción:

    OFFSET(antiguo, 1, 0)

    Lo mismo se hace para el nuevo lista:

    OFFSET(nuevo, 1, 0)

    Lo crucial es proporcionar un punto de salida para evitar que las llamadas recursivas continúen para siempre. Se hace con la ayuda de la función IF - si la función antiguo está vacía, la función devuelve texto su forma actual y sale:

    =LAMBDA(texto, antiguo, nuevo, IF(antiguo="", texto, MultiReplace(...))

    o

    =LAMBDA(texto, antiguo, nuevo, IF(antiguo"", MultiReplace(...), texto))

    Ejemplo 2. Sustituir varios caracteres en Excel

    En principio, el MultiReplace comentada en el ejemplo anterior también puede manejar caracteres individuales, siempre que cada carácter antiguo y nuevo se introduzca en una celda separada, exactamente igual que los nombres abreviados y completos de las capturas de pantalla anteriores.

    Si prefiere introducir los caracteres antiguos en una celda y los nuevos en otra, o escribirlos directamente en la fórmula, puede crear otra función personalizada, denominada ReplaceChars utilizando una de estas fórmulas:

    =LAMBDA(texto, caracteres_antiguos, caracteres_nuevos, IF(caracteres_antiguos"", ReplaceChars(SUBSTITUTE(texto, IZQUIERDA(caracteres_antiguos), IZQUIERDA(caracteres_nuevos)), DERECHA(caracteres_antiguos, LEN(caracteres_antiguos)-1), DERECHA(caracteres_nuevos, LEN(caracteres_nuevos)-1)), texto))

    O

    =LAMBDA(texto, caracteres_antiguos, caracteres_nuevos, IF(caracteres_antiguos="", texto, ReplaceChars(SUBSTITUTE(texto, IZQUIERDA(caracteres_antiguos), IZQUIERDA(caracteres_nuevos)), DERECHA(caracteres_antiguos, LEN(caracteres_antiguos)-1), DERECHA(caracteres_nuevos, LEN(caracteres_nuevos)-1))))

    Recuerde nombrar su nueva función Lambda en el Gestor de nombres como de costumbre:

    Y su nueva función personalizada está lista para ser utilizada:

    ReemplazarCaracteres(texto, caracteres_antiguos, caracteres_nuevos)

    Dónde:

    • Texto - las cuerdas originales
    • Antiguo - los caracteres a buscar
    • Nuevo - los caracteres a sustituir por

    Para probarlo, hagamos algo que se hace a menudo con los datos importados: sustituyamos las comillas inteligentes y los apóstrofos inteligentes por comillas rectas y apóstrofos rectos.

    En primer lugar, introducimos las comillas inteligentes y el apóstrofo inteligente en D2, y las comillas rectas y el apóstrofo recto en E2, separando los caracteres con espacios para mejorar la legibilidad. (Como utilizamos el mismo delimitador en ambas celdas, no tendrá ningún impacto en el resultado: Excel se limitará a sustituir un espacio por un espacio).

    Después, introducimos esta fórmula en B2:

    =ReemplazarCaras(A2:A4, D2, E2)

    Y obtener exactamente los resultados que buscábamos:

    También es posible escribir los caracteres directamente en la fórmula. En nuestro caso, sólo hay que acordarse de "duplicar" las comillas rectas así:

    =ReplaceChars(A2:A4, "" " '", """ "" '")

    Cómo funciona esta fórmula

    En ReplaceChars realiza un ciclo a través de caracteres_antiguos y nuevos_caracteres y realiza una sustitución cada vez empezando por el primer carácter de la izquierda. Esta parte la realiza la función SUBSTITUTE:

    SUBSTITUTE(texto, IZQUIERDA(caracteres_antiguos), IZQUIERDA(caracteres_nuevos))

    En cada iteración, la función DERECHA elimina un carácter de la izquierda de los dos campos caracteres_antiguos y nuevos_caracteres para que LEFT pueda obtener el siguiente par de caracteres para la sustitución:

    ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))

    Antes de cada llamada recursiva, la función IF evalúa la variable caracteres_antiguos Si no está vacía, la función se llama a sí misma. En cuanto se sustituye el último carácter, el proceso de iteración finaliza, la fórmula devuelve texto su forma actual y sale.

    Nota: Dado que la función SUBSTITUTE utilizada en nuestras fórmulas básicas es distingue entre mayúsculas y minúsculas tanto Lambdas ( MultiReplace y ReplaceChars ) tratan las mayúsculas y las minúsculas como caracteres diferentes.

    Buscar y reemplazar en masa con UDF

    En caso de que la función LAMBDA no esté disponible en su Excel, puede escribir una función definida por el usuario para el reemplazo múltiple de forma tradicional utilizando VBA.

    Para distinguir la UDF de la definida por LAMBDA MultiReplace vamos a darle un nombre diferente, por ejemplo MassReplace El código de la función es el siguiente:

    Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'array para almacenar los resultados Dim arSearchReplace(), sTmp As String 'array donde almacenar los pares find/replace, cadena temporal Dim iFindCurRow, cntFindRows As Long 'índice de la fila actual del array SearchReplace, recuento de filas Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'índice de la fila actual en el rango fuente, índice de la columna actual en el rango fuente, recuento de filas, recuento de columnas cntInputRows = InputRng.Rows.Count cntInputCols = InputRng.Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'preparando la matriz de pares buscar/reemplazar ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Buscar y reemplazar en el rango fuente For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Reemplazar todos los pares buscar/reemplazar en cada celdaFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End Function

    Al igual que las funciones definidas por LAMBDA, las UDF son libro de trabajo Eso significa que el MassReplace sólo funcionará en el libro en el que haya insertado el código. Si no está seguro de cómo hacerlo correctamente, siga los pasos descritos en Cómo insertar código VBA en Excel.

    Una vez añadido el código a tu libro de trabajo, la función aparecerá en el intellisense de fórmulas - ¡sólo el nombre de la función, no los argumentos! Aunque, creo que no es gran cosa recordar la sintaxis:

    MassReplace(rango_entrada, rango_buscado, rango_reemplazado)

    Dónde:

    • Rango_entrada - el rango de origen en el que desea reemplazar los valores.
    • Buscar_rango - los caracteres, cadenas o palabras a buscar.
    • Sustituir_rango - los caracteres, cadenas o palabras por los que reemplazar.

    En Excel 365, debido al soporte para matrices dinámicas, esto funciona como una fórmula normal, que sólo necesita ser introducida en la celda superior (B2):

    =MassReplace(A2:A10, D2:D4, E2:E4)

    En el Excel predinámico, esto funciona como una fórmula de matriz CSE al viejo estilo: se selecciona todo el rango de origen (B2:B10), se escribe la fórmula y se pulsan simultáneamente las teclas Ctrl + Mayús + Intro para completarla.

    Ventajas : una alternativa decente a una función LAMBDA personalizada en Excel 2019, Excel 2016 y versiones anteriores.

    Inconvenientes El libro de trabajo debe guardarse como archivo .xlsm habilitado para macros.

    Reemplazo masivo en Excel con macro VBA

    Si le gusta automatizar tareas comunes con macros, puede utilizar el siguiente código VBA para buscar y reemplazar varios valores en un rango.

    Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "Source data:" , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Set ReplaceRng = Application.InputBox( "Replace range:" , "Bulk Replace" , Type :=8) Err.Clear If Not ReplaceRng Is Nothing ThenApplication.ScreenUpdating = False For Each Rng In ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End Sub

    Para utilizar la macro inmediatamente, puede descargar nuestro libro de trabajo de ejemplo que contiene el código, o bien insertar el código en su propio libro de trabajo.

    Cómo utilizar la macro

    Antes de ejecutar la macro, escriba los valores antiguos y nuevos en dos columnas adyacentes como se muestra en la imagen siguiente (C2:D4).

    A continuación, seleccione los datos de origen, pulse Alt + F8 , elija la opción BulkReplace y haga clic en Ejecutar .

    Como el fuente rabia está preseleccionado, basta con verificar la referencia y hacer clic en OK:

    A continuación, seleccione sustituir gama y haga clic en Aceptar:

    ¡Hecho!

    Ventajas Configuración una vez, reutilización en cualquier momento

    Inconvenientes la macro debe ejecutarse con cada cambio de datos

    Buscar y reemplazar varias veces en Excel con la herramienta Subcadena

    En el primer ejemplo, mencioné que SUSTITUIR anidado es la forma más fácil de reemplazar múltiples valores en Excel. Admito que estaba equivocado. ¡Nuestra Ultimate Suite hace las cosas aún más fáciles!

    Para realizar la sustitución en masa en su hoja de cálculo, diríjase a la sección Datos de Ablebits y haga clic en Herramientas de subcadena > Sustituir subcadenas .

    En Sustituir subcadenas que le pedirá que defina el Fuente alcance y Subcadenas gama.

    Con los dos rangos seleccionados, haga clic en el botón Sustituir y encontrará los resultados en una nueva columna insertada a la derecha de los datos originales. Sí, ¡así de fácil!

    Consejo: antes de pulsar Sustituir hay algo importante que debe tener en cuenta: el Mayúsculas y minúsculas Asegúrese de seleccionarla si desea tratar las mayúsculas y las minúsculas como caracteres diferentes. En este ejemplo, marcamos esta opción porque sólo queremos sustituir las cadenas en mayúsculas y dejar intactas las subcadenas como "fr", "uk" o "ak" dentro de otras palabras.

    Si tiene curiosidad por saber qué otras operaciones masivas se pueden realizar con cadenas, consulte otras herramientas de subcadena incluidas en nuestra Ultimate Suite. O mejor aún, ¡descargue la versión de evaluación a continuación y pruébela!

    Así es como se buscan y sustituyen varias palabras y caracteres a la vez en Excel. Gracias por leer y ¡espero verte en nuestro blog la semana que viene!

    Descargas disponibles

    Búsqueda y sustitución múltiple en Excel (archivo .xlsm)

    Ultimate Suite 14 días versión totalmente funcional (archivo .exe)

    Michael Brown es un entusiasta de la tecnología dedicado y apasionado por simplificar procesos complejos utilizando herramientas de software. Con más de una década de experiencia en la industria de la tecnología, ha perfeccionado sus habilidades en Microsoft Excel y Outlook, así como en Google Sheets y Docs. El blog de Michael está dedicado a compartir su conocimiento y experiencia con otros, brindando consejos y tutoriales fáciles de seguir para mejorar la productividad y la eficiencia. Ya sea un profesional experimentado o un principiante, el blog de Michael ofrece información valiosa y consejos prácticos para aprovechar al máximo estas herramientas de software esenciales.