Excel: vind en vervang veelvuldige waardes gelyktydig

  • Deel Dit
Michael Brown

In hierdie tutoriaal sal ons na verskeie maniere kyk om veelvuldige woorde, stringe of individuele karakters te vind en te vervang, sodat jy die een kan kies wat die beste by jou behoeftes pas.

Hoe soek mense gewoonlik in Excel? Meestal, deur die gebruik van die Vind & Vervang kenmerk, wat goed werk vir enkele waardes. Maar wat as jy tiene of selfs honderde items het om te vervang? Niemand sal sekerlik al daardie vervangings met die hand een-vir-een wil maak en dit dan weer van voor af doen wanneer die data verander nie. Gelukkig is daar 'n paar meer effektiewe metodes om massavervanging in Excel te doen, en ons gaan elkeen van hulle in detail ondersoek.

    Vind en vervang veelvuldige waardes met geneste PLAASVERVANGER

    Die maklikste manier om veelvuldige inskrywings in Excel te vind en te vervang, is deur die SUBSTITUT-funksie te gebruik.

    Die formule se logika is baie eenvoudig: jy skryf 'n paar individuele funksies om 'n ou waarde met 'n nuwe een te vervang . En dan, nes jy daardie funksies in mekaar, sodat elke daaropvolgende PLAASVERVANGER die uitvoer van die vorige PLAASVERVANGER gebruik om die volgende waarde te soek. ou_teks1 , nuwe_teks1 ), ou_teks2 , nuwe_teks2 ), ou_teks3 , nuwe_teks3 )

    In die lys van liggings in A2:A10, veronderstel jy wil die verkorte landname (soos FR , VK en VSA ) vervang met volledige MassReplace -funksie sal slegs werk in die werkboek waarin jy die kode ingevoeg het. As jy nie seker is hoe om dit korrek te doen nie, volg asseblief die stappe beskryf in Hoe om VBA-kode in Excel in te voeg.

    Sodra die kode by jou werkboek gevoeg is, sal die funksie in die formule intellisense verskyn - slegs die funksie se naam, nie die argumente nie! Ek glo egter dat dit nie 'n groot probleem is om die sintaksis te onthou nie:

    MassReplace(input_range, find_range, replace_range)

    Where:

    • Input_range - die bronreeks waar jy wil waardes vervang.
    • Vind_reeks - die karakters, stringe of woorde om na te soek.
    • Vervang_reeks - die karakters, stringe, of woorde om mee te vervang.

    In Excel 365, as gevolg van ondersteuning vir dinamiese skikkings, werk dit as 'n normale formule, wat slegs in die boonste sel (B2) ingevoer hoef te word:

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

    In pre-dinamiese Excel werk dit as 'n ou-styl CSE skikking formule: jy kies die hele bronreeks (B2:B10), tik die formule, en druk die Ctrl + Shift + Enter-sleutels gelyktydig om dit te voltooi.

    Voordele : 'n ordentlike alternatief vir 'n pasgemaakte LAMBDA-funksie in Excel 2019 , Excel 2016 en vroeër weergawes

    Nadele : die werkboek moet gestoor word as 'n makro-geaktiveerde .xlsm-lêer

    Grootvervanging in Excel met VBA-makro

    As jy van motor hou paring algemene take met makros, dan jykan die volgende VBA-kode gebruik om veelvuldige waardes in 'n reeks te vind en te vervang.

    Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range By Error Resume Next Stel SourceRng = Application.InputBox( "Source data: " , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Stel ReplaceRng = Application.InputBox( "Replace range:" , "Bulk Replace" , Type :=8) Err.Clear If Not ReplaceRng Is Nothing Then Application.ScreenUpdating = False For Every 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

    Om dadelik van die makro gebruik te maak, kan jy ons voorbeeldwerkboek aflaai wat die kode bevat. Of jy kan die kode in jou eie werkboek invoeg.

    Hoe om die makro te gebruik

    Voordat die makro uitgevoer word, tik die ou en nuwe waardes in twee aangrensende kolomme soos in die prent hieronder ( C2:D4).

    En dan, kies jou brondata, druk Alt + F8 , kies die BulkReplace -makro en klik Run .

    Aangesien die bron woede vooraf gekies is, verifieer net die verwysing en klik OK:

    Daarna, kies die vervang reeks , en klik OK:

    Klaar!

    Voordele : stel een keer op, hergebruik enige tyd

    Nadele : die makro moet met elke data uitgevoer wordverander

    Meervoudige vind en vervang in Excel met Substring-instrument

    In die heel eerste voorbeeld het ek genoem dat geneste PLAASVERVANGER die maklikste manier is om veelvuldige waardes in Excel te vervang. Ek erken dat ek verkeerd was. Ons Ultimate Suite maak dinge nog makliker!

    Om massavervanging in jou werkblad te doen, gaan na die Ablebits Data -oortjie en klik Substring Tools > Vervang substringe .

    Die dialoogkassie Vervang substringe sal verskyn en vra jou om die Bron -reeks en <1 te definieer>Substrings -reeks.

    Met die twee reekse gekies, klik die Vervang -knoppie en vind die resultate in 'n nuwe kolom wat regs ingevoeg is van die oorspronklike data. Jip, dit is so maklik!

    Wenk. Voordat jy Vervang klik, is daar een belangrike ding wat jy moet oorweeg - die Hooflettergevoelig blokkie. Maak seker dat jy dit kies as jy die hoofletters en kleinletters as verskillende karakters wil hanteer. In hierdie voorbeeld merk ons ​​hierdie opsie omdat ons slegs die stringe met hoofletters wil vervang en die substringe soos "fr", "uk" of "ak" binne ander woorde ongeskonde wil laat.

    As jy nuuskierig is om te weet watter ander grootmaat bewerkings op snare uitgevoer kan word, kyk na ander Substring Tools wat by ons Ultimate Suite ingesluit is. Of selfs beter, laai die evalueringsweergawe hieronder af en probeer dit!

    Dis hoe om te vind en te vervangveelvuldige woorde en karakters gelyktydig in Excel. Ek bedank jou vir die lees en hoop om jou volgende week op ons blog te sien!

    Beskikbare aflaaie

    Veelvuldige vind en vervang in Excel (.xlsm-lêer)

    Ultimate Suite 14 -dag ten volle funksionele weergawe (.exe-lêer)

    name.

    Om dit te laat doen, voer die ou waardes in D2:D4 en die nuwe waardes in E2:E4 in soos in die skermkiekie hieronder. En dan, plaas die onderstaande formule in B2 en druk Enter:

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

    ...en jy sal al die vervangings op een slag laat doen:

    Neem asseblief kennis, die bogenoemde benadering werk net in Excel 365 wat dinamiese skikkings ondersteun.

    In pre-dinamiese weergawes van Excel 2019, Excel 2016 en vroeër, moet die formule wees geskryf vir die boonste sel (B2), en dan na die onderstaande selle gekopieer:

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

    Let asseblief daarop dat, in hierdie geval, ons die vervangingswaardes met absolute selverwysings sluit, dus hulle sal nie skuif wanneer die formule af gekopieer word nie.

    Let wel. Die PLAASVERVANGER-funksie is hooflettergevoelig , wat beteken dat jy die ou waardes ( ou_teks ) in dieselfde letterkas moet tik as wat dit in die oorspronklike data voorkom.

    So maklik as wat dit moontlik kan wees, het hierdie metode 'n beduidende nadeel - wanneer jy dosyne items het om te vervang, word geneste funksies redelik moeilik om te bestuur.

    Voordele : maklik -om te implementeer; ondersteun in alle Excel-weergawes

    Nadele : beste om gebruik te word vir 'n beperkte aantal vind/vervang waardes

    Soek en vervang veelvuldige inskrywings met XLOOKUP

    In situasies wanneer jy die hele selinhoud wil vervang, nie sy deel nie, kom die XLOOKUP-funksie handig te pas.

    Kom onssê jy het 'n lys van lande in kolom A en beoog om al die afkortings met die ooreenstemmende volle name te vervang. Soos in die vorige voorbeeld, begin jy met die invoer van die "Vind" en "Vervang" items in aparte kolomme (D en E onderskeidelik), en voer dan hierdie formule in B2 in:

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

    Vertaal uit die Excel-taal in die menslike taal, hier is wat die formule doen:

    Soek vir die A2-waarde (opsoek_waarde) in D2:D4 (opsoek_skikking) en gee 'n passing van E2:E4 (return_skikking) terug. As dit nie gevind word nie, trek die oorspronklike waarde van A2 af.

    Dubbelklik op die vulhandvatsel om die formule na die onderstaande selle gekopieer te kry, en die resultaat sal jou nie laat wag nie:

    Aangesien die XLOOKUP-funksie slegs in Excel 365 beskikbaar is, sal die bogenoemde formule nie in vroeëre weergawes werk nie. Jy kan egter maklik hierdie gedrag naboots met 'n kombinasie van IFERROR of IFNA en VLOOKUP:

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

    Let wel. Anders as PLAASVERVANGER, is die XLOOKUP en VLOOKUP funksies nie hooflettergevoelig , wat beteken dat hulle soek na die opsoekwaardes en die letterkas ignoreer. Ons formule sal byvoorbeeld beide FR en fr vervang met Frankryk .

    Voordele : ongewone gebruik van gewone funksies; werk in alle Excel-weergawes

    Nadele : werk op 'n selvlak, kan nie 'n deel van die selinhoud vervang nie

    Veelvuldige vervang deur rekursiewe LAMBDA-funksie

    Vir Microsoft365 intekenare, Excel bied 'n spesiale funksie wat dit moontlik maak om persoonlike funksies te skep deur 'n tradisionele formuletaal te gebruik. Jip, ek praat van LAMBDA. Die skoonheid van hierdie metode is dat dit 'n baie lang en komplekse formule kan omskep in 'n baie kompakte en eenvoudige een. Boonop laat dit jou jou eie funksies skep wat nie in Excel bestaan ​​nie, iets wat voorheen slegs met VBA moontlik was.

    Vir die gedetailleerde inligting oor die skep en gebruik van pasgemaakte LAMBDA-funksies, kyk asseblief na hierdie tutoriaal: Hoe om LAMBDA-funksies in Excel te skryf. Hier sal ons 'n paar praktiese voorbeelde bespreek.

    Voordele : die resultaat is 'n elegante en ongelooflik maklik om te gebruik funksie, ongeag die aantal vervangingspare

    Nadele : slegs beskikbaar in Excel 365; werkboek-spesifiek en kan nie oor verskillende werkboeke hergebruik word nie

    Voorbeeld 1. Soek en vervang veelvuldige woorde / stringe tegelyk

    Om veelvuldige woorde of teks op een slag te vervang, het ons 'n pasgemaakte LAMBDA-funksie, genaamd MultiReplace , wat een van hierdie vorme kan aanneem:

    =LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))

    Of

    =LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))

    Albei is rekursief funksies wat hulself noem. Die verskil is slegs in hoe die uittreepunt vasgestel word.

    In die eerste formule kontroleer die IF-funksie of die ou -lys nie leeg is nie (oud"). Indien WAAR, word die MultiReplace -funksie genoem. Indien ONWAAR, die funksiegee teks dit sy huidige vorm terug en gaan uit.

    Die tweede formule gebruik die omgekeerde logika: as ou leeg is (oud=""), gee dan terug teks en gaan uit; anders bel MultiReplace .

    Die moeilikste deel is bereik! Wat vir jou oorbly om te doen is om die MultiReplace -funksie in die Naambestuurder te noem soos in die skermkiekie hieronder. Vir die gedetailleerde riglyne, sien asseblief Hoe om 'n LAMBDA-funksie te benoem.

    Sodra die funksie 'n naam gekry het, kan jy dit net soos enige ander ingeboude funksie gebruik.

    Watter van die twee formulevariasies jy ook al kies, vanuit die eindgebruikerperspektief, is die sintaksis so eenvoudig soos hierdie:

    MultiReplace(teks, oud, nuut)

    Waar:

    • Teks - die brondata
    • Ou - die waardes om te vind
    • Nuut - die waardes om mee te vervang

    Om die vorige voorbeeld 'n bietjie verder te neem, kom ons vervang nie net die land-afkortings nie, maar ook die staatsafkortings. Tik hiervoor die afkortings ( ou waardes) in kolom D wat in D2 begin en die volle name ( nuwe waardes) in kolom E wat in E2 begin.

    In B2, voer die MultiReplace-funksie in:

    =MultiReplace(A2:A10, D2, E2)

    Tik Enter en geniet die resultate :)

    Hoe hierdie formule werk

    Die leidraad om die formule te verstaan ​​is om rekursie te verstaan. Dit klink dalk ingewikkeld, maar die beginsel is redelik eenvoudig. Met elkeeniterasie, 'n rekursiewe funksie los een klein geval van 'n groter probleem op. In ons geval loop die MultiReplace -funksie deur die ou en nuwe waardes en voer met elke lus een vervanging uit:

    MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))

    Soos met geneste PLAASVERVANGER-funksies, word die resultaat van die vorige PLAASVERVANGER die teks -parameter vir die volgende PLAASVERVANGER. Met ander woorde, op elke daaropvolgende oproep van MultiReplace , verwerk die SUBSTITUTE-funksie nie die oorspronklike teksstring nie, maar die uitvoer van die vorige oproep.

    Om al die items op die <1 te hanteer>ou lys, ons begin met die boonste sel, en gebruik die OFFSET-funksie om 1 ry af te skuif met elke interaksie:

    OFFSET(old, 1, 0)

    Dieselfde word gedoen vir die nuwe lys:

    OFFSET(new, 1, 0)

    Die deurslaggewende ding is om 'n uitgangspunt te verskaf om te verhoed dat rekursiewe oproepe vir ewig voortgaan. Dit word gedoen met behulp van die IF-funksie - as die ou sel leeg is, gee die funksie teks terug in sy huidige vorm en gaan uit:

    =LAMBDA(text, old, new, IF(old="", text, MultiReplace(…)))

    of

    =LAMBDA(text, old, new, IF(old"", MultiReplace(…), text))

    Voorbeeld 2. Vervang veelvuldige karakters in Excel

    In beginsel kan die MultiReplace -funksie wat in die vorige voorbeeld bespreek is, hanteer individuele karakters ook, mits elke ou en nuwe karakter in 'n aparte sel ingevoer word, presies soos die verkorte en volle name in die bogenoemde skermkiekies.

    As jy eerder die ou wil invoerkarakters in een sel en die nuwe karakters in 'n ander sel, of tik hulle direk in die formule, dan kan jy 'n ander pasgemaakte funksie, genaamd ReplaceChars , skep deur een van hierdie formules te gebruik:

    =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))))

    Onthou om jou nuwe Lambda-funksie soos gewoonlik in die Naambestuurder te noem:

    En jou nuwe pasgemaakte funksie is gereed vir gebruik:

    ReplaceChars(text, old_chars, new_chars)

    Waar:

    • Teks - die oorspronklike stringe
    • Ou - die karakters om na te soek
    • Nuut - die karakters om te vervang met

    Om dit 'n veldtoets te gee, kom ons doen iets wat dikwels op ingevoerde data uitgevoer word - vervang slim aanhalingstekens en slim apostrofe met reguit aanhalingstekens en reguit apostrofe.

    Eers voer ons die slim aanhalings en slim apostrof in D2 in, reguit aanhalingstekens en reguit apostrof in E2 , die karakters te skei met spasies vir beter leesbaarheid. (Aangesien ons dieselfde skeidingsteken in beide selle gebruik, sal dit geen impak op die resultaat hê nie - Excel sal net 'n spasie met 'n spasie vervang.)

    Daarna voer ons hierdie formule in B2 in:

    =ReplaceChars(A2:A4, D2, E2)

    En kry presies die resultate waarna ons gesoek het:

    Dit is ook moontlik om die karakters direk in die formule in te tik. In ons geval, onthou net om die reguit aanhalingstekens soos volg te "dupliseer":

    =ReplaceChars(A2:A4, "“ ” ’", """ "" '")

    Hoe hierdie formule werk

    The ReplaceChars funksie siklusse deur die ou_tekens - en nuwe_tekens -stringe en maak een vervanging op 'n slag vanaf die eerste karakter aan die linkerkant. Hierdie deel word gedoen deur die SUBSTITUT-funksie:

    SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))

    Met elke iterasie stroop die REGS-funksie een karakter van die linkerkant van beide die ou_tekens en af new_chars -stringe, sodat LEFT die volgende paar karakters vir vervanging kan haal:

    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 rekursiewe oproep evalueer die IF-funksie die ou_chars -string . As dit nie leeg is nie, roep die funksie homself. Sodra die laaste karakter vervang is, word die iterasieproses voltooi, die formule gee teks sy huidige vorm terug en gaan uit.

    Let wel. Omdat die PLAASVERVANG-funksie wat in ons kernformules gebruik word hooflettersensitief is, hanteer beide Lambdas ( MultiReplace en ReplaceChars ) hoofletters en kleinletters as verskillende karakters.

    Mass vind en vervang met UDF

    In die geval dat die LAMBDA-funksie nie in jou Excel beskikbaar is nie, kan jy 'n gebruikergedefinieerde funksie vir multi-vervanging op 'n tradisionele manier met VBA skryf.

    Om die UDF van die LAMBDA-gedefinieerde MultiReplace -funksie te onderskei, gaan ons dit anders noem, sê MassReplace . Die kode van die funksie is soos volg:

    Funksie MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () DimarRes() As Variant 'skikking om die resultate te stoor Dim arSearchReplace(), sTmp As String 'skikking waar om die vind/vervang-pare te stoor, tydelike string Dim iFindCurRow, cntFindRows As Long 'indeks van die huidige ry van die SearchReplace-skikking, tel van rye Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 'indeks van die huidige ry in die bronreeks, indeks van die huidige kolom in die bronreeks, telling van rye, telling van kolomme cntInputRows = InputRng.Rows.Count InputRngs = InputRng. .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'voorbereiding van die skikking van vind/vervang vir iFarch/vervang pairFurs iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Waarde arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Waarde Volgende 'Soek en vervang in die bronreeks Vir iInputCurnCurR =InvoerCurnCurR Fort =InvoerCurRowR 1 Om cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol).Waarde 'Vervanging van alle vind/vervang pare in elke sel For iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arFindCurRow, 1), (iInputCurRow, iInputCurCol) = sTmp Volgende Volgende MassReplace = arRes Eindfunksie

    Soos LAMBDA-gedefinieerde funksies, is UDF's werkboekwyd . Dit beteken die

    Michael Brown is 'n toegewyde tegnologie-entoesias met 'n passie om komplekse prosesse te vereenvoudig deur sagteware-instrumente te gebruik. Met meer as 'n dekade se ondervinding in die tegnologiebedryf, het hy sy vaardighede in Microsoft Excel en Outlook, sowel as Google Sheets en Docs, opgeskerp. Michael se blog is toegewy daaraan om sy kennis en kundigheid met ander te deel, en verskaf maklik-om-te volg wenke en tutoriale vir die verbetering van produktiwiteit en doeltreffendheid. Of jy nou 'n ervare professionele persoon of 'n beginner is, Michael se blog bied waardevolle insigte en praktiese raad om die meeste uit hierdie noodsaaklike sagteware-nutsmiddels te kry.