Inhoudsopgave
In deze handleiding bekijken we verschillende manieren om meerdere woorden, reeksen of afzonderlijke tekens te vinden en te vervangen, zodat u kunt kiezen wat het beste bij uw behoeften past.
Hoe zoeken mensen meestal in Excel? Meestal met de functie Zoeken & Vervangen, die prima werkt voor enkele waarden. Maar wat als u tientallen of zelfs honderden items moet vervangen? Niemand wil natuurlijk al die vervangingen een voor een handmatig uitvoeren, en het dan allemaal opnieuw doen als de gegevens veranderen. Gelukkig zijn er een paar effectievere methoden om massaal te vervangen in Excel, engaan we ze allemaal in detail onderzoeken.
Meerdere waarden zoeken en vervangen met geneste SUBSTITUTE
De eenvoudigste manier om in Excel meerdere vermeldingen te vinden en te vervangen is met de functie SUBSTITUTE.
De logica van de formule is heel eenvoudig: u schrijft een paar afzonderlijke functies om een oude waarde te vervangen door een nieuwe. En vervolgens nestelt u die functies in elkaar, zodat elke volgende SUBSTITUTE de uitvoer van de vorige SUBSTITUTE gebruikt om de volgende waarde te zoeken.
SUBSTITUUT( SUBSTITUUT( SUBSTITUUT( tekst , oude_tekst1 , nieuwe_tekst1 ), oude_tekst2 , nieuwe_tekst2 ), oude_tekst3 , nieuwe_tekst3 )Stel dat u in de lijst met locaties in A2:A10 de afgekorte landnamen wilt vervangen (zoals FR , UK en USA ) met volledige namen.
Voer de oude waarden in D2:D4 in en de nieuwe waarden in E2:E4, zoals in de onderstaande schermafbeelding. Zet vervolgens de onderstaande formule in B2 en druk op Enter:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
...en je hebt alle vervangingen in een keer gedaan:
De bovenstaande aanpak werkt alleen in Excel 365 die dynamische arrays ondersteunt.
In pre-dynamische versies van Excel 2019, Excel 2016 en eerder, moet de formule worden geschreven voor de bovenste cel (B2), en vervolgens worden gekopieerd naar de onderliggende cellen:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Let op: in dit geval vergrendelen we de vervangende waarden met absolute celverwijzingen, zodat ze niet verschuiven als we de formule naar beneden kopiëren.
Opmerking. De functie SUBSTITUTE is hoofdlettergevoelig wat betekent dat u de oude waarden ( oude_tekst ) in dezelfde hoofdletters als in de oorspronkelijke gegevens.
Hoe gemakkelijk het ook is, deze methode heeft een belangrijk nadeel - wanneer u tientallen items moet vervangen, worden geneste functies vrij moeilijk te beheren.
Voordelen : eenvoudig te implementeren; ondersteund in alle Excel-versies
Nadelen : best te gebruiken voor een beperkt aantal zoek/vervang waarden
Meerdere items zoeken en vervangen met XLOOKUP
In de situatie dat u de gehele celinhoud niet zijn deel, komt de XLOOKUP functie van pas.
Stel, u hebt een lijst met landen in kolom A en u wilt alle afkortingen vervangen door de bijbehorende volledige namen. Net als in het vorige voorbeeld begint u met het invoeren van de items "Zoeken" en "Vervangen" in afzonderlijke kolommen (respectievelijk D en E), en voert u vervolgens deze formule in B2 in:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Vertaald van de taal van Excel naar de taal van de mens, is dit wat de formule doet:
Zoek naar de A2-waarde (lookup_value) in D2:D4 (lookup_array) en stuur een overeenkomst terug uit E2:E4 (return_array). Indien niet gevonden, haal dan de oorspronkelijke waarde uit A2.
Dubbelklik op de vulgreep om de formule naar de onderstaande cellen te laten kopiëren:
Aangezien de XLOOKUP-functie alleen beschikbaar is in Excel 365, zal de bovenstaande formule niet werken in eerdere versies. U kunt dit gedrag echter gemakkelijk nabootsen met een combinatie van IFERROR of IFNA en VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Opmerking. In tegenstelling tot SUBSTITUTE zijn de functies XLOOKUP en VLOOKUP niet hoofdlettergevoelig , wat betekent dat ze zoeken naar de opzoekwaarden zonder rekening te houden met de hoofdletters. Bijvoorbeeld, onze formule zou zowel het volgende vervangen FR en fr met Frankrijk .
Voordelen : ongebruikelijk gebruik van gebruikelijke functies; werkt in alle Excel-versies
Nadelen : werkt op celniveau, kan een deel van de celinhoud niet vervangen
Meervoudig vervangen met recursieve LAMBDA-functie
Voor Microsoft 365-abonnees biedt Excel een speciale functie waarmee aangepaste functies kunnen worden gemaakt met behulp van een traditionele formule-taal. Yep, ik heb het over LAMBDA. Het mooie van deze methode is dat het een zeer lange en complexe formule kan omzetten in een zeer compacte en eenvoudige formule. Bovendien kunt u hiermee uw eigen functies maken die niet bestaan in Excel, iets wat eerder wasalleen mogelijk met VBA.
Voor gedetailleerde informatie over het maken en gebruiken van aangepaste LAMBDA-functies kunt u deze handleiding raadplegen: Hoe LAMBDA-functies schrijven in Excel. Hier bespreken we een paar praktische voorbeelden.
Voordelen : het resultaat is een elegante en verbazingwekkend eenvoudig te gebruiken functie, ongeacht het aantal vervangingsparen
Nadelen : alleen beschikbaar in Excel 365; werkmap-specifiek en kan niet worden hergebruikt in verschillende werkmappen
Voorbeeld 1. Meerdere woorden / strings tegelijk zoeken en vervangen
Om meerdere woorden of tekst in één keer te vervangen, hebben we een aangepaste LAMBDA-functie gemaakt, genaamd MultiReplace die een van deze vormen kan aannemen:
=LAMBDA(tekst, oud, nieuw, IF(oud"", MultiReplace(SUBSTITUTE(tekst, oud, nieuw), OFFSET(oud, 1, 0), OFFSET(nieuw, 1, 0)), tekst))
Of
=LAMBDA(tekst, oud, nieuw, IF(oud="", tekst, MultiReplace(SUBSTITUTE(tekst, oud, nieuw), OFFSET(oud, 1, 0), OFFSET(nieuw, 1, 0))))
Beide zijn recursieve functies die zichzelf aanroepen. Het verschil zit alleen in hoe het eindpunt wordt bepaald.
In de eerste formule controleert de IF-functie of de oude lijst is niet leeg (oud""). Indien TRUE, de MultiReplace Indien FALSE, retourneert de functie tekst het zijn huidige vorm en verlaat het.
De tweede formule gebruikt de omgekeerde logica: als oude leeg is (old=""), dan return tekst en verlaat; anders roept u MultiReplace .
Het moeilijkste deel is bereikt! Wat u nog moet doen is de naam van de MultiReplace functie in de Name Manager zoals in de onderstaande schermafbeelding. Voor de gedetailleerde richtlijnen, zie Hoe een LAMBDA-functie een naam geven.
Zodra de functie een naam krijgt, kunt u hem gebruiken zoals elke andere ingebouwde functie.
Welke van de twee formulevarianten u ook kiest, voor de eindgebruiker is de syntaxis zo eenvoudig:
MultiReplace(tekst, oud, nieuw)Waar:
- Tekst - de brongegevens
- Oud - de waarden te vinden
- Nieuw - de waarden om te vervangen door
Als we het vorige voorbeeld iets verder nemen, vervangen we niet alleen de landafkortingen, maar ook de afkortingen van de staten. Typ hiervoor de afkortingen ( oude waarden) in kolom D te beginnen met D2 en de volledige namen ( nieuwe waarden) in kolom E te beginnen in E2.
Voer in B2 de functie MultiReplace in:
=MultiReplace(A2:A10, D2, E2)
Druk op Enter en geniet van de resultaten :)
Hoe deze formule werkt
De sleutel tot het begrijpen van de formule is het begrijpen van recursie. Dit klinkt misschien ingewikkeld, maar het principe is heel eenvoudig. Met elke iteratie lost een recursieve functie een klein deel van een groter probleem op. In ons geval is de MultiReplace functie doorloopt de oude en nieuwe waarden en voert bij elke lus één vervanging uit:
MultiReplace (SUBSTITUTE(tekst, oud, nieuw), OFFSET(oud, 1, 0), OFFSET(nieuw, 1, 0))
Net als bij geneste SUBSTITUTE-functies wordt het resultaat van de vorige SUBSTITUTE de tekst parameter voor de volgende SUBSTITUTE. Met andere woorden, bij elke volgende oproep van MultiReplace verwerkt de SUBSTITUTE-functie niet de oorspronkelijke tekststring, maar de uitvoer van de vorige oproep.
Om alle items op de oude lijst beginnen we met de bovenste cel, en gebruiken we de functie OFFSET om bij elke interactie 1 rij naar beneden te gaan:
OFFSET(oud, 1, 0)
Hetzelfde wordt gedaan voor de nieuwe lijst:
OFFSET(nieuw, 1, 0)
Het belangrijkste is om een punt van uitgang om te voorkomen dat recursieve oproepen eeuwig doorgaan. Dit wordt gedaan met behulp van de IF-functie - als de oude cel leeg is, retourneert de functie tekst het zijn huidige vorm en uitgang:
=LAMBDA(tekst, oud, nieuw, IF(oud="", tekst, MultiReplace(...)))
of
=LAMBDA(tekst, oud, nieuw, IF(oud"", MultiReplace(...), tekst))
Voorbeeld 2. Meerdere tekens vervangen in Excel
In principe is de MultiReplace functie uit het vorige voorbeeld kan ook individuele tekens verwerken, mits elk oud en nieuw teken in een aparte cel wordt ingevoerd, precies zoals de afgekorte en volledige namen in de bovenstaande schermafbeeldingen.
Als u liever de oude tekens in een cel en de nieuwe tekens in een andere cel invoert, of ze rechtstreeks in de formule typt, dan kunt u een andere aangepaste functie maken, genaamd ReplaceChars door een van deze formules te gebruiken:
=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))
Of
=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))))
Vergeet niet uw nieuwe Lambda-functie zoals gebruikelijk een naam te geven in de Name Manager:
En uw nieuwe aangepaste functie is klaar voor gebruik:
ReplaceChars(tekst, oude_tekens, nieuwe_tekens)Waar:
- Tekst - de originele snaren
- Oud - de te zoeken tekens
- Nieuw - de tekens die moeten worden vervangen door
Om het een praktijktest te geven, laten we iets doen dat vaak wordt uitgevoerd op geïmporteerde gegevens - slimme aanhalingstekens en slimme apostrofs vervangen door rechte aanhalingstekens en rechte apostrofs.
Eerst voeren we de slimme aanhalingstekens en de slimme apostrof in D2 in, en de rechte aanhalingstekens en de rechte apostrof in E2, waarbij we de tekens scheiden met spaties voor een betere leesbaarheid. (Aangezien we in beide cellen hetzelfde scheidingsteken gebruiken, heeft dit geen invloed op het resultaat - Excel vervangt een spatie gewoon door een spatie).
Daarna voeren we deze formule in B2 in:
=ReplaceChars(A2:A4, D2, E2)
En krijgen precies de resultaten die we zochten:
Het is ook mogelijk om de tekens rechtstreeks in de formule te typen. In ons geval hoeft u alleen maar de rechte aanhalingstekens als volgt te "dupliceren":
=ReplaceChars(A2:A4, "" " '", "" "" '")
Hoe deze formule werkt
De ReplaceChars functie fietst door de oude_tekens en nieuwe_tekens en vervangt één teken per keer vanaf het eerste teken links. Dit deel wordt gedaan door de functie SUBSTITUTE:
SUBSTITUTE(tekst, LINKS(oude_tekens), LINKS(nieuwe_tekens))
Bij elke iteratie verwijdert de functie RIGHT één teken van links van zowel de oude_tekens en nieuwe_tekens tekenreeksen, zodat LINKS het volgende paar tekens voor vervanging kan ophalen:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Voor elke recursieve aanroep evalueert de IF-functie de oude_tekens Als deze niet leeg is, roept de functie zichzelf aan. Zodra het laatste teken is vervangen, eindigt het iteratieproces, de formule geeft terug tekst het zijn huidige vorm en uitgang.
Opmerking. Omdat de SUBSTITUTE-functie in onze kernformules hoofdlettergevoelig , zowel Lambdas ( MultiReplace en ReplaceChars ) behandelen hoofdletters en kleine letters als verschillende tekens.
Massaal zoeken en vervangen met UDF
Indien de LAMBDA-functie niet beschikbaar is in uw Excel, kunt u een door de gebruiker gedefinieerde functie voor multi-vervanging schrijven op een traditionele manier met behulp van VBA.
Om de UDF te onderscheiden van de door LAMBDA gedefinieerde MultiReplace functie, gaan we hem anders noemen, bijvoorbeeld MassReplace De code van de functie is als volgt:
Functie MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'array om de resultaten op te slaan Dim arSearchReplace(), sTmp As String 'array waar de find/replace paren worden opgeslagen, tijdelijke string Dim iFindCurRow, cntFindRows As Long 'index van de huidige rij van de SearchReplace array, aantal rijen Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'index van de huidige rij in het bronbereik, index van de huidige kolom in het bronbereik, aantal rijen, aantal kolommen 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) 'voorbereiden van de array van zoek/vervang-paren VooriFindCurRow = 1 tot cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Zoeken en vervangen in het bronbereik Voor iInputCurRow = 1 tot cntInputRows Voor iInputCurCol = 1 tot cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Vervangen van alle find/replace-paren in elke celVoor iFindCurRow = 1 Tot cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Volgende arRes(iInputCurRow, iInputCurCol) = sTmp Volgende MassReplace = arRes Einde FunctieNet als LAMBDA-gedefinieerde functies zijn UDF's werkboek-breed Dat betekent dat de MassReplace functie werkt alleen in de werkmap waarin u de code hebt ingevoegd. Als u niet zeker weet hoe u dit correct moet doen, volg dan de stappen beschreven in Hoe voeg ik VBA-code in Excel in.
Zodra de code is toegevoegd aan je werkmap, verschijnt de functie in de formule-intellisense - alleen de naam van de functie, niet de argumenten! Hoewel, ik geloof dat het geen probleem is om de syntaxis te onthouden:
MassReplace(input_range, find_range, replace_range)Waar:
- Invoerbereik - het bronbereik waar u waarden wilt vervangen.
- Zoek_bereik - de tekens, strings of woorden waarnaar moet worden gezocht.
- Vervangen_bereik - de tekens, strings of woorden om door te vervangen.
In Excel 365 werkt dit, vanwege de ondersteuning voor dynamische matrices, als een normale formule, die alleen in de bovenste cel (B2) hoeft te worden ingevoerd:
=MassReplace(A2:A10, D2:D4, E2:E4)
In pre-dynamisch Excel werkt dit als een oude stijl CSE-arrayformule: u selecteert het hele bronbereik (B2:B10), typt de formule en drukt tegelijkertijd op de toetsen Ctrl + Shift + Enter om de formule te voltooien.
Voordelen : een fatsoenlijk alternatief voor een aangepaste LAMBDA-functie in Excel 2019, Excel 2016 en eerdere versies
Nadelen : De werkmap moet worden opgeslagen als een .xlsm-bestand dat geschikt is voor macro's.
Bulk vervangen in Excel met VBA-macro
Als u graag veelvoorkomende taken met macro's automatiseert, dan kunt u de volgende VBA-code gebruiken om meerdere waarden in een bereik te vinden en te vervangen.
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 Voor elke Rng In ReplaceRng.Columns(1).Cells SourceRng.Replace wat:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End SubOm de macro meteen te gebruiken, kunt u onze voorbeeldwerkmap met de code downloaden. Of u kunt de code in uw eigen werkmap invoegen.
Hoe de macro te gebruiken
Voordat u de macro uitvoert, typt u de oude en nieuwe waarden in twee kolommen naast elkaar, zoals in de onderstaande afbeelding (C2:D4).
En selecteer dan uw brongegevens, druk op Alt + F8 , kies de BulkVervanging macro, en klik op Ren .
Als de bron woede voorgeselecteerd is, hoeft u alleen maar de referentie te controleren en op OK te klikken:
Selecteer daarna de reeks vervangen en klik op OK:
Klaar!
Voordelen : eenmaal instellen, altijd opnieuw gebruiken
Nadelen : de macro moet worden uitgevoerd bij elke gegevenswijziging
Meervoudig zoeken en vervangen in Excel met Substring tool
In het allereerste voorbeeld zei ik dat geneste SUBSTITUTE de gemakkelijkste manier is om meerdere waarden in Excel te vervangen. Ik geef toe dat ik het mis had. Onze Ultimate Suite maakt het nog gemakkelijker!
Om de massavervanging in uw werkblad uit te voeren, gaat u naar de Ablebits gegevens tabblad en klik op Substring gereedschap > Substrings vervangen .
De Substrings vervangen dialoogvenster verschijnt waarin u wordt gevraagd de Bron bereik en Substrings bereik.
Met de twee bereiken geselecteerd, klikt u op de Vervang en vindt de resultaten in een nieuwe kolom die rechts van de oorspronkelijke gegevens is ingevoegd. Ja, zo eenvoudig is het!
Tip. Voordat u op Vervang is er een belangrijk ding voor u om te overwegen - de Hoofdlettergevoelig Selecteer deze optie als u hoofdletters en kleine letters als verschillende tekens wilt behandelen. In dit voorbeeld vinken we deze optie aan omdat we alleen de hoofdletterstrings willen vervangen en de substrings zoals "fr", "uk" of "ak" binnen andere woorden intact willen laten.
Als u benieuwd bent welke andere bulkbewerkingen kunnen worden uitgevoerd op strings, bekijk dan de andere Substring Tools in onze Ultimate Suite. Of nog beter, download de evaluatieversie hieronder en probeer het eens!
Dat is hoe u meerdere woorden en tekens tegelijk kunt vinden en vervangen in Excel. Ik dank u voor het lezen en hoop u volgende week op onze blog te zien!
Beschikbare downloads
Meervoudig zoeken en vervangen in Excel (.xlsm-bestand)
Ultimate Suite 14 dagen volledig functionele versie (.exe bestand)