Turinys
Šioje pamokoje parodyta, kaip naudojant VBA paryškinti pasikartojančius žodžius arba teksto eilutes ląstelėje.
"Excel" sąlyginis formatavimas leidžia išryškinti pasikartojančius elementus visais įmanomais būdais: su 1-uoju pasikartojimu arba be jo, viename stulpelyje arba keliuose stulpeliuose, iš eilės pasikartojančiose ląstelėse ir ištisose eilutėse pagal vienodas pagrindinio stulpelio reikšmes. Tačiau, kaip įprasta, yra "bet". Sąlyginio formatavimo taisyklės veikia ląstelės lygmeniu, o jūs galite norėti išryškinti pasikartojančiustekstą, o ne visas ląsteles. Tai galima padaryti tik naudojant makrokomandas. Net jei neturite jokios patirties su VBA, neskubėkite uždaryti šio puslapio. Čia rasite paruoštų naudoti kodo pavyzdžių ir išsamių instrukcijų, kaip juos naudoti savo darbalapiuose.
Paryškinti pasikartojančius žodžius ląstelėje, neatsižvelgiant į teksto raidę
Šiame pavyzdyje parodyta, kaip atspalvinti pasikartojančius žodžius arba teksto eilutes ląstelėje raudona šrifto spalva, kaip parodyta toliau pateiktame paveikslėlyje. Atkreipkite dėmesį, kad mažosios ir didžiosios raidės traktuojamos kaip tie patys simboliai. Pvz, oranžinė , ORANŽINĖ ir Oranžinė laikomi tuo pačiu žodžiu.
Makro kodas yra toks:
Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Įveskite skirtuką, kuris atskiria reikšmes ląstelėje" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, False ) Next End Sub Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " " , Optional CaseSensitive AsBoolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIndex = wordIndex + 1 To UBound (words) If word =words(nextWordIndex) Then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End SubDubliuojančio teksto paryškinimas ląstelėje, atsižvelgiant į mažąsias ir didžiąsias raides
Daugeliu atvejų dirbdami su tekstiniais įrašais "Excel" programoje nekreipiame dėmesio į raidžių raidę. Tačiau tam tikromis aplinkybėmis teksto raidė yra svarbi. Pavyzdžiui, jei dirbate su ID, slaptažodžiais ar kitais tokio pobūdžio įrašais, eilutės, pvz. 1-AA , 1-aa ir 1-Aa nesidubliuoja ir neturėtų būti paryškinti:
Tokiu atveju naudokite šią kodo versiją:
Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Įveskite skirtuką, kuris atskiria reikšmes ląstelėje" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, True ) Next End Sub Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " " , Optional CaseSensitive AsBoolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIndex = wordIndex + 1 To UBound (words) If word =words(nextWordIndex) Then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End SubKaip naudoti makrokomandas dubliuojamiems žodžiams "Excel" programoje paryškinti
Jei esate pradedantysis VBA naudotojas, toliau pateikiamos žingsnis po žingsnio instrukcijos padės jums patogiai pereiti per šį procesą. Patyrę naudotojai gali tiesiog pasirinkti atsisiuntimo nuorodą ir praleisti likusią dalį :)
Į darbaknygę pridėkite kodą
Pradėkite nuo makrokomandos kodo įterpimo į "Excel" darbaknygę:
- Atidarykite sąsiuvinį, kuriame norite paryškinti dublikatus.
- Paspauskite Alt + F11, kad atidarytumėte Visual Basic redaktorių.
- Kairiajame lange dešiniuoju pelės klavišu spustelėkite Ši darbo knyga ir pasirinkite Įdėkite > Modulis iš kontekstinio meniu.
- Įklijuokite kodą į langą Kodas.
- Norėdami išsaugoti makrokomandą ir naudoti ateityje, būtinai išsaugokite savo darbaknygę kaip makrokomandą palaikantį .xlsm failą.
Taip pat galite atsisiųsti mūsų pavyzdinę darbaknygę ir iš jos paleisti makrokomandas. Pavyzdinėje darbaknygėje yra šios makrokomandos:
- HighlightDupesCaseInsensitive - atspalviai dubliuojasi ląstelėje, neatsižvelgiant į raidžių raidę.
- HighlightDupesCaseSensitive - išryškina dublikatus ląstelėje, atsižvelgdamas į raidžių raidę.
Daugiau informacijos rasite skyriuje Kaip įterpti VBA kodą į "Excel".
Paleisti makrokomandą
Į savo darbaknygę pridėję kodą arba atsisiuntę ir atidarę mūsų pavyzdinį failą, makrokomandą paleiskite taip:
- Darbalapyje pasirinkite langelius, kuriuose norite paryškinti dubliuojantį tekstą. Tai gali būti vienas diapazonas arba keli nesusiję diapazonai.
- Paspauskite Alt + F8 .
- Pasirinkite dominantį makrokomandą ir spustelėkite Paleisti .
- Makrogramoje bus paprašyta nurodyti skirtuką, kuris atskirtų pasirinktų langelių reikšmes. Iš anksto nustatytas skirtukas (mūsų atveju - kablelis ir tarpas) bus automatiškai rodomas įvesties lange. Atsižvelgdami į savo poreikius, galite palikti numatytąjį skirtuką arba įvesti kitą, tada spustelėkite OK.
Po akimirkos visos pasirinktose ląstelėse esančios pasikartojančios eilutės bus nuspalvintos raudona spalva (arba bet kokia jūsų kode nustatyta šrifto spalva).
Patarimas. Norėdami greitai pašalinti dublikatus ląstelėje, galite naudoti funkciją "Pašalinti pasikartojančias eilutes" - vieną iš daugelio laiko taupymo įrankių, įtrauktų į "Ultimate Suite" rinkinį.
Kaip pritaikyti kodą savo poreikiams
Naudodamiesi šiomis naudojimo pastabomis ir turėdami elementarių VBA žinių (arba tiesiog atidžiai laikydamiesi toliau pateiktų nurodymų), galite lengvai pakeisti kodus pagal savo poreikius.
Vieta tame pačiame modulyje
Kaip pastebėjote, abi makrokomandos ( HighlightDupesCaseSensitive ir HighlightDupesCaseInsensitive ) skambinti į HighlightDupeWordsInCell Skirtumas tarp šių dviejų makrokomandų yra tik 3-iajame parametre (CaseSensitive), perduodamame minėtai funkcijai.
Jei ieškoma pagal mažąsias ir didžiąsias raides, nustatoma reikšmė TRUE:
Skambinkite HighlightDupeWordsInCell(Cell, Delimiter, True)
Ieškant pagal mažąsias ir didžiąsias raides, nustatoma reikšmė FALSE:
Skambinkite HighlightDupeWordsInCell(Cell, Delimiter, False)
Kad makrokomandos veiktų, kodas HighlightDupeWordsInCell funkcija turi būti patalpinta tame pačiame modulyje kaip ir makrokomandos.
Skirtukas
Paleidus makrokomandą, bus paprašyta nurodyti skirtuką, kuris atskirtų pasirinktose ląstelėse esančius žodžius ir (arba) eilutes. Numatytasis skirtukas yra kablelis ir tarpas (", ") ir jis iš anksto nustatytas įvesties lange:
Delimiter = InputBox("Nurodykite skirtuką, kuris atskiria ląstelės reikšmes", "Delimiter", ", ")
Savo kode kaip iš anksto nustatytą skirtuką galite naudoti bet kurį kitą (-ius) simbolį (-ius).
Spalva
Pagal numatytuosius nustatymus HighlightDupeWordsInCell funkcija dublikatus atspalvina raudona šrifto spalva. Spalva apibrėžiama šioje eilutėje:
Cell.Characters(positionInText, Len(word)).Font.Color = vbRed
Čia vbRed yra tam tikra VBA spalvų konstanta. Norėdami rodyti dublikatus kita spalva, vbRed galite pakeisti kita konstanta, pavyzdžiui, vbGreen, vbYellow, vbBlue ir t. t. T rs palaikomų spalvų konstantų sąrašą rasite čia.
Štai kaip paryškinti pasikartojančius žodžius "Excel" ląstelėse. Dėkoju, kad perskaitėte, ir tikiuosi, kad kitą savaitę susitiksime mūsų tinklaraštyje!
Galimi atsisiuntimai
Kodo pavyzdžiai, kaip išryškinti pasikartojančius elementus ląstelėje (.xlsm failas)
"Ultimate Suite" 14 dienų pilnai veikianti versija (.exe failas)