Ynhâldsopjefte
Yn dizze tutorial sille wy ferskate manieren besjen om meardere wurden, snaren of yndividuele tekens te finen en te ferfangen, sadat jo dejinge kinne kieze dy't it bêste by jo behoeften past.
Hoe sykje minsken normaal yn Excel? Meast, troch it brûken fan de Find & amp; Ferfange funksje, dy't goed wurket foar inkele wearden. Mar wat as jo tsientallen of sels hûnderten items hawwe om te ferfangen? Wiswier, gjinien soe al dy ferfangings mei de hân ien foar ien meitsje wolle, en it dan opnij dwaan as de gegevens feroarje. Gelokkich binne d'r in pear mear effektive metoaden om massa ferfange te dwaan yn Excel, en wy sille elk fan har yn detail ûndersykje.
Fyn en ferfange meardere wearden mei nested SUBSTITUTE
De maklikste manier om meardere yngongen yn Excel te finen en te ferfangen is troch de funksje SUBSTITUTE te brûken.
De logika fan 'e formule is heul ienfâldich: jo skriuwe in pear yndividuele funksjes om in âlde wearde te ferfangen troch in nije. . En dan nêste jo dy funksjes yn elkoar, sadat elke folgjende FERGESE de útfier fan 'e foarige FERGESE brûkt om de folgjende wearde te sykjen. âlde_tekst1 , nije_tekst1 ), âlde_tekst2 , nije_tekst2 ), âlde_tekst3 , nije_tekst3 )
Stel yn 'e list fan lokaasjes yn A2:A10 dat jo de ôfkoarte lânnammen (lykas FR , UK en USA ) ferfange wolle mei folsleineDe funksje MassReplace sil allinich wurkje yn it wurkboek wêryn jo de koade ynfoege hawwe. As jo net wis binne hoe't jo dit goed dogge, folgje dan de stappen beskreaun yn Hoe VBA-koade yn Excel ynfoegje.
As de koade oan jo wurkboek tafoege is, sil de funksje ferskine yn 'e formule intellisense - allinich de namme fan de funksje, net de arguminten! Hoewol, ik leau dat it gjin grut probleem is om de syntaksis te ûnthâlden:
MassReplace(input_range, find_range, replace_range)Wêr:
- Ynput_berik - it boarneberik dêr't jo wolle wearden ferfange.
- Find_berik - de tekens, strings of wurden om nei te sykjen.
- Replace_range - de tekens, strings, of wurden om mei te ferfangen.
Yn Excel 365 wurket dit troch stipe foar dynamyske arrays as in normale formule, dy't allinnich yn de boppeste sel (B2) ynfierd wurde moat:
=MassReplace(A2:A10, D2:D4, E2:E4)
Yn pre-dynamyske Excel wurket dit as in âlde styl CSE-arrayformule: jo selektearje it hiele boarneberik (B2:B10), typ de formule, en druk tagelyk op de Ctrl + Shift + Enter-toetsen om it te foltôgjen.
Foardielen : in fatsoenlik alternatyf foar in oanpaste LAMBDA-funksje yn Excel 2019 . 0> As jo fan auto hâlde mating mienskiplike taken mei makro, dan dokin de folgjende VBA-koade brûke om meardere wearden yn in berik te finen en te ferfangen.
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 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 SubOm daliks gebrûk te meitsjen fan de makro, kinne jo ús foarbyldwurkboek downloade mei de koade. Of jo kinne de koade yn jo eigen wurkboek ynfoegje.
Hoe kinne jo de makro brûke
Foar it útfieren fan de makro, typ de âlde en nije wearden yn twa neistlizzende kolommen lykas werjûn yn de ôfbylding hjirûnder ( C2:D4).
En dan, selektearje jo boarne gegevens, druk op Alt + F8, kies de BulkReplace makro, en klik op Utfiere .
As de boarne woede is foarselekteare, ferifiearje gewoan de referinsje en klikje op OK:
Dan, selektearje it ferfangberik , en klikje op OK:
Klear!
Foardielen : ien kear ynstelle, op elk momint opnij brûke
Nearmen : de makro moat mei elke gegevens útfierd wurdeferoarje
Meardere fine en ferfange yn Excel mei Substring-ark
Yn it earste foarbyld neamde ik dat nested SUBSTITUTE de maklikste manier is om meardere wearden yn Excel te ferfangen. Ik jou ta dat ik ferkeard wie. Us Ultimate Suite makket dingen noch makliker!
Om massaferfanging yn jo wurkblêd te dwaan, gean dan nei it ljepblêd Ablebits Data en klik op Substring-ark > Substrings ferfange .
It dialoochfinster Substrings ferfange sil ferskine en jo freegje om it Boarne -berik en <1 te definiearjen>Substrings -berik.
Mei de twa berikken selektearre, klikje op de knop Ferfange en fine de resultaten yn in nije kolom ynfoege nei rjochts fan 'e orizjinele gegevens. Ja, it is sa maklik!
Tip. Foardat jo op Ferfange klikke, is d'r ien wichtich ding foar jo om te beskôgjen - it fak Hoofdlettergefoelige . Wês wis dat jo it selektearje as jo de haad- en lytse letters as ferskillende karakters wolle behannelje. Yn dit foarbyld tikke wy dizze opsje oan om't wy allinich de haadletters ferfange wolle en de substrings lykas "fr", "uk" of "ak" yn oare wurden yntakt litte.
As jo nijsgjirrich binne om te witten hokker oare bulkoperaasjes kinne wurde útfierd op snaren, besjoch dan oare Substring-ark yn ús Ultimate Suite. Of noch better, download de evaluaasjeferzje hjirûnder en besykje it!
Dat is hoe te finen en te ferfangenmeardere wurden en tekens tagelyk yn Excel. Ik tankje jo foar it lêzen en hoopje jo nije wike op ús blog te sjen!
Beskikbere downloads
Meardere fine en ferfange yn Excel (.xlsm-bestân)
Ultimate Suite 14 -day folslein funksjonele ferzje (.exe-bestân)
nammen.Om it dien te hawwen, fier de âlde wearden yn D2:D4 en de nije wearden yn E2:E4 lykas werjûn yn 'e skermôfbylding hjirûnder. En set dan de ûndersteande formule yn B2 en druk op Enter:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
...en jo sille alle ferfangings tagelyk dien hawwe:
Tink derom, de boppesteande oanpak wurket allinnich yn Excel 365 dat dynamyske arrays stipet.
Yn pre-dynamyske ferzjes fan Excel 2019, Excel 2016 en earder, moat de formule wêze skreaun foar de boppeste sel (B2), en dan kopieare nei de ûndersteande sellen:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Let op dat wy yn dit gefal de ferfangende wearden beskoattelje mei absolute selferwizings, dus se sille net ferskowe by it kopiearjen fan de formule nei ûnderen.
Opmerking. De funksje SUBSTITUTE is gefoel foar haadletters , wat betsjut dat jo de âlde wearden ( âlde_tekst ) moatte yntype yn deselde haadletter as se yn 'e oarspronklike gegevens ferskine.
Sa maklik as it mooglik kin wêze, dizze metoade hat in signifikant neidiel - as jo tsientallen items hawwe om te ferfangen, wurde nestede funksjes frij lestich te behearjen.
Foardielen : maklik -ymplemintearje; stipe yn alle Excel-ferzjes
Neddielen : bêste te brûken foar in beheind oantal fyn-/ferfangwearden
Sykje en ferfange meardere yngongen mei XLOOKUP
Yn situaasje as jo sykje om de hiele sellynhâld te ferfangen, net syn diel, komt de XLOOKUP-funksje goed fan pas.
Litte wysis dat jo in list fan lannen hawwe yn kolom A en fan doel binne om alle ôfkoartings te ferfangen troch de oerienkommende folsleine nammen. Lykas yn it foarige foarbyld, begjinne jo mei it ynfieren fan de items "Fyn" en "Ferfange" yn aparte kolommen (respektyflik D en E), en fier dan dizze formule yn B2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Oerset fan 'e Excel-taal yn' e minsklike taal, hjir is wat de formule docht:
Sykje nei de A2-wearde (lookup_value) yn D2:D4 (lookup_array) en jou in wedstriid werom fan E2:E4 (return_array). As net fûn, lûk dan de orizjinele wearde fan A2.
Dûbelklikje op de fillhandgreep om de formule te kopiearjen nei de ûndersteande sellen, en it resultaat sil jo net wachtsje litte:
Om't de XLOOKUP-funksje allinich beskikber is yn Excel 365, sil de boppesteande formule net wurkje yn eardere ferzjes. Jo kinne dit gedrach lykwols maklik imitearje mei in kombinaasje fan IFERROR of IFNA en VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Opmerking. Oars as SUBSTITUTE, binne de funksjes XLOOKUP en VLOOKUP net hoofdlettergefoelich , wat betsjut dat se sykje nei de opsykwearden mei it negearjen fan de letters. Bygelyks, ús formule soe sawol FR as fr ferfange troch Frankryk .
Foardielen : ûngewoan gebrûk fan gewoane funksjes; wurket yn alle Excel-ferzjes
Neidielen : wurket op selnivo, kin in diel fan 'e selynhâld net ferfange
Meardere ferfange mei rekursive LAMBDA-funksje
Foar Microsoft365 abonnees, Excel biedt in spesjale funksje wêrmei it meitsjen fan oanpaste funksjes mei help fan in tradisjonele formule taal. Ja, ik haw it oer LAMBDA. De skientme fan dizze metoade is dat it in tige lange en komplekse formule kin omsette yn in heul kompakt en ienfâldich. Boppedat kinne jo jo eigen funksjes oanmeitsje dy't net yn Excel besteane, eat dat earder allinich mei VBA mooglik wie.
Foar de detaillearre ynformaasje oer it meitsjen en brûken fan oanpaste LAMBDA-funksjes, sjoch asjebleaft dit tutorial: Hoe om LAMBDA-funksjes yn Excel te skriuwen. Hjir sille wy in pear praktyske foarbylden beprate.
Foardielen : it resultaat is in elegante en verbazingwekkend ienfâldich te brûken funksje, nettsjinsteande it oantal ferfangende pearen
Neddielen : allinich beskikber yn Excel 365; wurkboekspesifyk en kin net opnij brûkt wurde oer ferskate wurkboeken
Foarbyld 1. Sykje en ferfange meardere wurden / stringen tagelyk
Om meardere wurden of tekst yn ien kear te ferfangen, hawwe wy in oanpaste oanmakke LAMBDA-funksje, neamd MultiReplace , dy't ien fan dizze foarmen kin nimme:
=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))))
Beide binne rekursyf funksjes dy't harsels neame. It ferskil sit allinnich yn hoe't it útgongspunt fêststeld is.
Yn de earste formule kontrolearret de IF-funksje oft de âlde -list net leech is (âld""). As TRUE wurdt de funksje MultiReplace oanroppen. As FALSE, de funksjejout tekst har hjoeddeistige foarm werom en giet út.
De twadde formule brûkt de omkearde logika: as âld leech is (âld=""), dan werom tekst en ôfslute; oars skilje MultiReplace .
It lestichste diel is folbrocht! Wat jo oerbliuwe om te dwaan is de MultiReplace -funksje te neamen yn 'e Name Manager lykas werjûn yn' e skermôfbylding hjirûnder. Foar de detaillearre rjochtlinen, sjoch asjebleaft Hoe kinne jo in LAMBDA-funksje neame.
As de funksje ienris in namme kriget, kinne jo it brûke lykas elke oare ynboude funksje.
Wat fan 'e twa formulefarianten jo ek kieze, út it perspektyf fan ein-brûkers, de syntaksis is sa ienfâldich as dit:
MultiReplace(tekst, âld, nij)Wêr:
- Tekst - de boarnegegevens
- Ald - de wearden om te finen
- Nij - de wearden om te ferfangen mei
It foargeande foarbyld wat fierder te nimmen, lit ús net allinnich de lânôfkoartings ferfange, mar ek de steatôfkoartings. Typ hjirfoar de ôfkoartings ( âlde wearden) yn kolom D begjinnend yn D2 en de folsleine nammen ( nije wearden) yn kolom E begjinnend yn E2.
In B2, fier de MultiReplace-funksje yn:
=MultiReplace(A2:A10, D2, E2)
Tik op Enter en genietsje fan de resultaten :)
Hoe't dizze formule wurket
De oanwizing om de formule te begripen is rekursje te begripen. Dit klinkt miskien yngewikkeld, mar it prinsipe is frij simpel. Mei elkiteraasje, in rekursive funksje lost ien lyts eksimplaar fan in grutter probleem op. Yn ús gefal loopt de funksje MultiReplace troch de âlde en nije wearden en fiert mei elke loop ien ferfanging út:
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
Lykas by geneste SUBSTITUTE-funksjes, wurdt it resultaat fan 'e foarige SUBSTITUTE de parameter tekst foar de folgjende SUBSTITUTE. Mei oare wurden, op elke folgjende oprop fan MultiReplace ferwurket de funksje SUBSTITUTE net de oarspronklike tekststring, mar de útfier fan de foarige oprop.
Om alle items op de <1 te behanneljen>âlde -list, begjinne wy mei de boppeste sel, en brûke de OFFSET-funksje om by elke ynteraksje 1 rige nei ûnderen te ferpleatsen:
OFFSET(old, 1, 0)
Itselde wurdt dien foar de nije list:
OFFSET(new, 1, 0)
It krúsjale ding is om in útgongspunt te jaan om te foarkommen dat rekursive oproppen foar altyd trochgean. It wurdt dien mei help fan de IF-funksje - as de âlde sel leech is, jout de funksje tekst werom yn syn hjoeddeiske foarm en giet út:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(…)))
of
=LAMBDA(text, old, new, IF(old"", MultiReplace(…), text))
Foarbyld 2. Ferfange meardere tekens yn Excel
Yn prinsipe kin de funksje MultiReplace besprutsen yn it foarige foarbyld Behannelje ek yndividuele karakters, op betingst dat elk âld en nij karakter yn in aparte sel ynfierd wurdt, krekt lykas de ôfkoarte en folsleine nammen yn boppesteande skermôfbyldings.
As jo leaver de âlde ynfiere wolletekens yn ien sel en de nije karakters yn in oare sel, of typ se direkt yn 'e formule, dan kinne jo in oare oanpaste funksje meitsje, mei de namme ReplaceChars , troch ien fan dizze formules te brûken:
=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))))
Onthâld om jo nije Lambda-funksje te neamen yn de Name Manager lykas gewoanlik:
En jo nije oanpaste funksje is klear foar gebrûk:
ReplaceChars(text, old_chars, new_chars)Wêr:
- Tekst - de orizjinele strings
- Ald - de tekens om nei te sykjen
- Nij - de tekens om te ferfangen troch
Om it in fjildtest te jaan, litte wy wat dwaan dat faaks útfierd wurdt op ymporteare gegevens - ferfange tûke sitaten en tûke apostrofen troch rjochte quotes en rjochte apostrofen.
Earst ynfiere wy de tûke quotes en tûke apostrof yn D2, rjochte quotes en rjochte apostrof yn E2 , it skieden fan de karakters mei spaasjes foar bettere lêsberens. (Om't wy deselde skiedingsteken brûke yn beide sellen, sil it gjin ynfloed hawwe op it resultaat - Excel sil gewoan in spaasje ferfange troch in spaasje.)
Dêrnei fiere wy dizze formule yn yn B2:
=ReplaceChars(A2:A4, D2, E2)
En krije krekt de resultaten wêr't wy nei sochten:
It is ek mooglik om de tekens direkt yn 'e formule te typen. Unthâld yn ús gefal gewoan de rjochte quotes te "duplisearje" lykas dit:
=ReplaceChars(A2:A4, "“ ” ’", """ "" '")
Hoe dizze formule wurket
De ReplaceChars funksje rint troch de old_chars en new_chars -strings en makket ien ferfanging op in tiid begjinnend fan it earste karakter oan de linkerkant. Dit diel wurdt dien troch de funksje SUBSTITUTE:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Mei elke iteraasje slacht de RIGHT-funksje ien karakter fan links fan sawol de old_chars as ôf. new_chars -strings, sadat LEFT it folgjende pear karakters foar substitúsje ophelje koe:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Foar elke rekursive oprop evaluearret de IF-funksje de old_chars tekenrige . As it net leech is, ropt de funksje himsels. Sadree't it lêste karakter ferfongen is, einiget it iteraasjeproses, de formule jout tekst har hjoeddeistige foarm werom en giet út.
Opmerking. Om't de SUBSTITUTE-funksje dy't yn ús kearnformules brûkt wurdt gefoelige is, behannelje beide Lambda's ( MultiReplace en ReplaceChars ) haad- en lytse letters as ferskillende tekens.
Mass fine en ferfange mei UDF
Yn gefal dat de LAMBDA-funksje net beskikber is yn jo Excel, kinne jo in troch de brûker definieare funksje skriuwe foar multi-ferfanging op in tradisjonele manier mei VBA.
Om de UDF te ûnderskieden fan de LAMBDA-definieare MultiReplace -funksje, sille wy it oars neame, sis MassReplace . De koade fan de funksje is as folget:
Funksje MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () DimarRes() As fariant 'array om de resultaten op te slaan Dim arSearchReplace(), sTmp As String 'array wêr't de sykje/ferfange pearen opslein wurde, tydlike tekenrige Dim iFindCurRow, cntFindRows As Long 'yndeks fan 'e hjoeddeistige rige fan 'e SearchReplace-array, telle fan rigen Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 'yndeks fan 'e hjoeddeistige rige yn it boarneberik, yndeks fan 'e hjoeddeistige kolom yn it boarneberik, oantal rigen, oantal kolommen cntInputRows = InputRng.Rows.Count InputRngs .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'preparing the array of find/replace pairCreplace iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Wearde arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Waarde Folgjende 'Sykje en ferfange yn it boarneberik Foar iInput1To curRow iInput1To curRow 1 Om cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol).Wearde 'Alle fyn-/ferfangende pearen yn elke sel ferfange Foar iFindCurRow = 1 To cntFindRows sTmp = Ferfange(sTmp, arSearchReplace(iFindCurRow, 1), (ar)Folgende, 1) (iInputCurRow, iInputCurCol) = sTmp Folgjende Folgjende MassReplace = arRes EinfunksjeLykas LAMBDA-definieare funksjes binne UDF's wurkboekbreed . Dat betsjut de