Táboa de contidos
Neste titorial, analizaremos varias formas de buscar e substituír varias palabras, cadeas ou caracteres individuais, para que poidas escoller a que mellor se adapte ás túas necesidades.
Como a xente adoita buscar en Excel? Principalmente, usando o Find & Substituír a función, que funciona ben para valores únicos. Pero e se tes decenas ou mesmo centos de elementos que substituír? Seguramente, ninguén querería facer todas esas substitucións manualmente unha por unha, e despois facelo de novo cando cambien os datos. Afortunadamente, hai algúns métodos máis eficaces para facer a substitución masiva en Excel, e imos investigar cada un deles en detalle.
Busca e substitúe varios valores con SUBSTITUTE aniñado
O xeito máis sinxelo de atopar e substituír varias entradas en Excel é mediante a función SUBSTITUTE.
A lóxica da fórmula é moi sinxela: escribes algunhas funcións individuais para substituír un valor antigo por outro novo. . E entón, aniñan esas funcións unhas noutras, de xeito que cada SUBSTITUTO posterior use a saída do SUBSTITUTO anterior para buscar o seguinte valor.
SUBSTITUTE(SUBSTITUTE( texto, texto_antigo1, texto_novo1), texto_antigo2, texto_antigo2), texto_antigo3, texto_novo3)Na lista de localizacións en A2:A10, supoña que quere substituír os nomes de países abreviados (como FR , UK e USA )A función MassReplace só funcionará no libro de traballo no que inseriches o código. Se non está seguro de como facelo correctamente, siga os pasos descritos en Como inserir o código VBA en Excel.
Unha vez que se engade o código ao seu libro de traballo, a función aparecerá na fórmula intellisense - só o nome da función, non os argumentos! Non obstante, creo que non é gran cousa lembrar a sintaxe:
MassReplace(intervalo_de_entrada, intervalo_atopado, rango_substituír)Onde:
- Intervalo_entrada - o intervalo de orixe onde quere substituír valores.
- Find_range - os caracteres, cadeas ou palabras que quere buscar.
- Replace_range - os caracteres, cadeas, ou palabras coas que substituír.
En Excel 365, debido á compatibilidade con matrices dinámicas, isto funciona como unha fórmula normal, que só debe introducirse na cela superior (B2):
=MassReplace(A2:A10, D2:D4, E2:E4)
En Excel predinámico, isto funciona como unha fórmula de matriz CSE de estilo antigo: selecciona todo o intervalo de orixe (B2:B10), escribe o fórmula e prema as teclas Ctrl + Maiús + Intro á vez para completala.
Vantaxes : unha alternativa decente a unha función LAMBDA personalizada en Excel 2019 , Excel 2016 e versións anteriores
Inconvenientes : o libro de traballo debe gardarse como un ficheiro .xlsm habilitado para macros
Substitución masiva en Excel con macro VBA
Se che gusta o automóbil asociando tarefas comúns con macros, entón tipode usar o seguinte código VBA para atopar e substituír varios valores nun intervalo.
Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Continue Next Set SourceRng = Application.InputBox( "Datos de orixe: " , "Substitución masiva" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng is Nothing Then Set ReplaceRng = Application.InputBox( "Substituír intervalo:" , "Bulk Substitución", Tipo :=8) Err.Borrar se non ReplaceRng non é nada, entón Application.ScreenUpdating = Falso para cada Rng en ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, substitución:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End SubPara facer uso da macro inmediatamente, podes descargar o noso caderno de exemplo que contén o código. Ou pode inserir o código no seu propio libro de traballo.
Como usar a macro
Antes de executar a macro, escriba os valores antigo e novo en dúas columnas adxacentes como se mostra na imaxe de abaixo ( C2:D4).
E logo, seleccione os datos de orixe, prema Alt + F8 , escolla a macro BulkReplace e prema en Executar .
Como se preselecciona source rage , só tes que verifique a referencia e faga clic en Aceptar:
Despois diso, selecciona o substituír intervalo e fai clic en Aceptar:
Feito!
Vantaxes : configurar unha vez, reutilizar en calquera momento
Inconvenientes : a macro debe executarse con todos os datoscambiar
Múltiples atopar e substituír en Excel coa ferramenta Subcadea
No primeiro exemplo, mencionei que o SUBSTITUTO anidado é a forma máis sinxela de substituír varios valores en Excel. Recoñezo que me equivoquei. A nosa Ultimate Suite facilita aínda máis as cousas!
Para realizar substitucións masivas na túa folla de traballo, vai á pestana Datos de Ablebits e fai clic en Ferramentas de subcadeas > Substituír subcadeas .
Aparecerá o cadro de diálogo Substituír subcadeas solicitándolle que defina o intervalo Fonte e Intervalo de subcadeas .
Cos dous intervalos seleccionados, faga clic no botón Substituír e busque os resultados nunha nova columna inserida á dereita. dos datos orixinais. Si, é así de sinxelo!
Consello. Antes de facer clic en Substituír , hai que ter en conta unha cousa importante: a caixa Distingue entre maiúsculas e minúsculas . Asegúrese de seleccionalo se desexa tratar as letras maiúsculas e minúsculas como caracteres diferentes. Neste exemplo, marcamos esta opción porque só queremos substituír as cadeas en maiúsculas e deixar as subcadeas como "fr", "uk" ou "ak" noutras palabras intactas.
Se tes curiosidade por saber que outras operacións masivas se poden realizar en cadeas, consulta outras ferramentas de subcadeas incluídas co noso Ultimate Suite. Ou aínda mellor, descarga a versión de avaliación a continuación e próbaa!
Así é como atopar e substituírvarias palabras e caracteres á vez en Excel. Grazas por ler e espero verte no noso blog a próxima semana!
Descargas dispoñibles
Múltiples busca e substitución en Excel (ficheiro .xlsm)
Ultimate Suite 14 -day versión totalmente funcional (ficheiro .exe)
nomes.Para facelo, introduce os valores antigos en D2:D4 e os novos valores en E2:E4 como se mostra na captura de pantalla que aparece a continuación. E despois, pon a seguinte fórmula en B2 e preme Intro:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
... e terás todas as substitucións feitas á vez:
Ten en conta que o enfoque anterior só funciona en Excel 365 que admite matrices dinámicas.
En versións predinámicas de Excel 2019, Excel 2016 e anteriores, a fórmula debe ser escrito para a cela máis alta (B2) e despois copiado nas celas de abaixo:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Por favor, preste atención a que, neste caso, bloqueamos os valores de substitución con referencias de cela absolutas, polo que non se moverán ao copiar a fórmula cara abaixo.
Nota. A función SUBSTITUTE é distingue entre maiúsculas e minúsculas , o que significa que debes escribir os valores antigos ( texto_antigo ) na mesma letra que aparecen nos datos orixinais.
Por máis sinxelo que poida ser, este método ten un inconveniente importante: cando tes ducias de elementos que substituír, as funcións aniñadas tórnanse bastante difíciles de xestionar.
Vantaxes : fácil -para implementar; admitido en todas as versións de Excel
Inconvenientes : é mellor usar para un número limitado de valores de buscar/substituír
Buscar e substituír varias entradas con XLOOKUP
Na situación na que buscas substituír o contido completo da cela , non a súa parte, a función XLOOKUP é útil.
Imosdigamos que ten unha lista de países na columna A e pretende substituír todas as abreviaturas polos nomes completos correspondentes. Como no exemplo anterior, comeza introducindo os elementos "Buscar" e "Substituír" en columnas separadas (D e E respectivamente), e despois introduce esta fórmula en B2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Traducido do idioma de Excel ao idioma humano, isto é o que fai a fórmula:
Busca o valor A2 (valor_busca) en D2:D4 (matriz_busca) e devolve unha coincidencia de E2:E4 (matriz_retorno). Se non se atopa, tire do valor orixinal de A2.
Fai dobre clic no controlador de recheo para copiar a fórmula nas celas de abaixo e o resultado non che fará esperar:
Dado que a función XLOOKUP só está dispoñible en Excel 365, a fórmula anterior non funcionará en versións anteriores. Non obstante, pode imitar facilmente este comportamento cunha combinación de IFERROR ou IFNA e VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Nota. A diferenza de SUBSTITUTE, as funcións XLOOKUP e VLOOKUP non distinguen entre maiúsculas e minúsculas , o que significa que buscan os valores de busca ignorando as letras maiúsculas. Por exemplo, a nosa fórmula substituiría tanto FR como fr por Francia .
Vantaxes : uso inusual das funcións habituais; funciona en todas as versións de Excel
Inconvenientes : funciona a nivel de cela, non pode substituír parte do contido da cela
Substitución múltiple mediante a función LAMBDA recursiva
Para Microsoft365 subscritores, Excel ofrece unha función especial que permite crear funcións personalizadas mediante unha linguaxe de fórmulas tradicional. Si, estou a falar de LAMBDA. A beleza deste método é que pode converter unha fórmula moi longa e complexa nunha moi compacta e sinxela. Ademais, permíteche crear as túas propias funcións que non existen en Excel, algo que antes só era posible con VBA.
Para obter información detallada sobre a creación e o uso de funcións LAMBDA personalizadas, consulta este tutorial: Como para escribir funcións LAMBDA en Excel. Aquí comentaremos un par de exemplos prácticos.
Vantaxes : o resultado é unha función elegante e sorprendentemente sinxela de usar, sen importar o número de pares de substitución
Inconvenientes : dispoñible só en Excel 365; específico do libro de traballo e non se pode reutilizar en diferentes libros
Exemplo 1. Busca e substitúe varias palabras/cadeas á vez
Para substituír varias palabras ou texto dunha soa vez, creamos un Función LAMBDA, chamada MultiReplace , que pode adoptar unha destas formas:
=LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))
Ou
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
Ambas son recursivas funcións que se chaman a si mesmas. A diferenza só está na forma en que se establece o punto de saída.
Na primeira fórmula, a función SE comproba se a lista antiga non está en branco (antiga ""). Se é TRUE, chámase á función MultiReplace . Se é FALSO, a funcióndevolve texto a súa forma actual e sae.
A segunda fórmula usa a lóxica inversa: se antigo está en branco (antigo=""), entón devolve texto e saír; se non, chame a MultiReplace .
A parte máis complicada está cumprida! O que che queda por facer é nomear a función MultiReplace no Xestor de nomes como se mostra na captura de pantalla que aparece a continuación. Para obter as directrices detalladas, consulte Como nomear unha función LAMBDA.
Unha vez que a función obteña un nome, pode usala como calquera outra función integrada.
Calquera das dúas variacións de fórmula que elixas, desde a perspectiva do usuario final, a sintaxe é tan sinxela como esta:
MultiReplace(texto, old, new)Onde:
- Texto : os datos de orixe
- Antigo : os valores a atopar
- Novo : os valores para substituír
Levando o exemplo anterior un pouco máis alá, substituímos non só as abreviaturas de país senón tamén as de estado. Para iso, escriba as abreviaturas ( valores antigos) na columna D que comeza en D2 e os nomes completos (valores novos ) na columna E que comeza en E2.
En B2, introduza a función MultiReplace:
=MultiReplace(A2:A10, D2, E2)
Preme Intro e goza dos resultados :)
Como funciona esta fórmula
A clave para comprender a fórmula é comprender a recursividade. Isto pode parecer complicado, pero o principio é bastante sinxelo. Con cada uniteración, unha función recursiva resolve unha pequena instancia dun problema maior. No noso caso, a función MultiReplace recorre os valores antigos e novos e, con cada bucle, realiza unha substitución:
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
Do mesmo xeito que coas funcións SUBSTITUTE aniñadas, o resultado do SUBSTITUTE anterior convértese no parámetro texto para o seguinte SUBSTITUTE. Noutras palabras, en cada chamada posterior de MultiReplace , a función SUBSTITUTE non procesa a cadea de texto orixinal, senón a saída da chamada anterior.
Para xestionar todos os elementos do antiga , comezamos coa cela superior e usamos a función OFFSET para mover 1 fila cara abaixo con cada interacción:
OFFSET(old, 1, 0)
O mesmo faise co nova lista:
OFFSET(new, 1, 0)
O fundamental é proporcionar un punto de saída para evitar que as chamadas recursivas continúen para sempre. Faise coa axuda da función SE: se a cela antiga está baleira, a función devolve texto a súa forma actual e sae:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(…)))
ou
=LAMBDA(text, old, new, IF(old"", MultiReplace(…), text))
Exemplo 2. Substitúe varios caracteres en Excel
En principio, a función MultiReplace discutida no exemplo anterior pode tamén manexa caracteres individuais, sempre que cada carácter antigo e novo se introduzan nunha cela separada, exactamente igual que os nomes completos e abreviados nas capturas de pantalla anteriores.
Se prefire introducir o antigocaracteres nunha cela e os novos caracteres noutra cela, ou escríbeos directamente na fórmula, entón podes crear outra función personalizada, chamada ReplaceChars , usando unha destas fórmulas:
=LAMBDA(text, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), text))
Ou
=LAMBDA(text, old_chars, new_chars, IF(old_chars="", text, ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
Lembre poñerlle nome á súa nova función Lambda no Xestor de nomes como de costume:
E a túa nova función personalizada está lista para usar:
ReplaceChars(text, old_chars, new_chars)Onde:
- Text - as cadeas orixinais
- Old - os caracteres para buscar
- Novo - os caracteres para substituír
Para facerlle unha proba de campo, imos facer algo que se realiza a miúdo en datos importados: substituír as comiñas intelixentes e os apóstrofos intelixentes por comiñas e apóstrofos rectos.
Primeiro, introducimos as comiñas intelixentes e o apóstrofo intelixente en D2, as comiñas rectas e o apóstrofo recto en E2. , separando os caracteres con espazos para unha mellor lexibilidade. (Como usamos o mesmo delimitador en ambas celas, non terá ningún impacto no resultado; Excel só substituirá un espazo por un espazo.)
Despois diso, introducimos esta fórmula en B2:
=ReplaceChars(A2:A4, D2, E2)
E obtén exactamente os resultados que buscabamos:
Tamén é posible escribir os caracteres directamente na fórmula. No noso caso, lembre de "duplicar" as comiñas rectas así:
=ReplaceChars(A2:A4, "“ ” ’", """ "" '")
Como funciona esta fórmula
Os ReplaceChars A función percorre as cadeas old_chars e new_chars e realiza unha substitución cada vez a partir do primeiro carácter da esquerda. Esta parte realízaa a función SUBSTITUTE:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Con cada iteración, a función RIGHT elimina un carácter da esquerda de caracteres_antigos e new_chars cadeas, de xeito que LEFT podería buscar o seguinte par de caracteres para substituír:
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 chamada recursiva, a función IF avalía a cadea old_chars . Se non está baleiro, a función chámase a si mesma. Tan pronto como o último carácter foi substituído, o proceso de iteración remata, a fórmula devolve texto a súa forma actual e sae.
Nota. Dado que a función SUBSTITUTE usada nas nosas fórmulas básicas é distingue entre maiúsculas e minúsculas , tanto os Lambdas ( MultiReplace como ReplaceChars ) tratan as letras maiúsculas e minúsculas como caracteres diferentes.
Buscar e substituír en masa con UDF
No caso de que a función LAMBDA non estea dispoñible no teu Excel, podes escribir unha función definida polo usuario para a substitución múltiple dun xeito tradicional mediante VBA.
Para distinguir a UDF da función MultiReplace definida por LAMBDA, imos poñerlle un nome diferente, digamos MassReplace . O código da función é o seguinte:
Función MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () DimarRes() As Variant 'matriz para almacenar os resultados Dim arSearchReplace(), sTmp As String 'matriz onde almacenar os pares buscar/substituír, cadea temporal Dim iFindCurRow, cntFindRows As Long 'índice da fila actual da matriz SearchReplace, conta de filas Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 'índice da fila actual no rango de orixe, índice da columna actual no rango de orixe, reconto de filas, conta de columnas cntInputRows = InputRng.Rows.Count = InputRngCols .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'preparando a matriz de buscar/substituír pares For iFindRowC paraReplacer cntFindRows. iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Buscando e substituíndo no intervalo de orixe For iInputCurRow =InputCurRow cCont =Input1 1 Para cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Substituíndo todos os pares de buscar/substituír en cada cela For iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace) Next(arSearch2) (iInputCurRow, iInputCurCol) = sTmp Seguinte Seguinte MassReplace = arRes End FunciónComo as funcións definidas por LAMBDA, as UDF son en todo o libro de traballo . Iso significa o