Indholdsfortegnelse
Vejledningen viser, hvordan du kan fremhæve duplikerede ord eller tekststrenge i en celle ved hjælp af VBA.
Excel betinget formatering gør det muligt at fremhæve dubletter på alle tænkelige måder: med eller uden 1. forekomst, i en enkelt kolonne eller flere kolonner, på hinanden følgende dubletter og hele rækker baseret på identiske værdier i en nøglekolonne. Men som sædvanlig er der et "men". Reglerne for betinget formatering fungerer på celleniveau, mens du måske ønsker at fremhæve dublettertekst i stedet for hele celler. Dette kan kun gøres med makroer. Selv hvis du ikke har nogen erfaring med VBA, skal du ikke skynde dig at lukke denne side. Her finder du eksempler på kode, der er klar til brug, og detaljerede instruktioner om, hvordan du bruger dem i dine regneark.
Fremhæv dubletter i en celle uden hensyntagen til tekstboksen
Dette eksempel viser, hvordan du kan skygge duplikerede ord eller tekststrenge i en celle med rød skriftfarve som vist i billedet nedenfor. Bemærk, at små og store bogstaver behandles som de samme tegn. For eksempel, orange , ORANGE og Orange anses for at være det samme ord.
Makroens kode er som følger:
Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Indtast den afgrænser, der adskiller værdierne i en celle" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, False ) Next End Sub 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 SubFremhæv dubletter i en celle med hensyn til hhv.
I de fleste situationer har vi en tendens til at ignorere bogstaver, når vi arbejder med tekstposter i Excel. Under visse omstændigheder er det dog vigtigt, at der er forskel på bogstaver. Hvis du f.eks. har med ID'er, adgangskoder eller andre poster af den slags at gøre, kan strenge som f.eks. 1-AA , 1-aa og 1-Aa er ikke dubletter og bør ikke fremhæves:
I dette tilfælde skal du bruge følgende version af koden:
Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Indtast den afgrænser, der adskiller værdierne i en celle" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, True ) Next End Sub 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 SubSådan bruger du makroer til at fremhæve duplikerede ord i Excel
Hvis du er nybegynder i VBA, vil nedenstående trinvise vejledning hjælpe dig godt på vej. Erfarne brugere kan bare vælge download-linket og springe resten over :)
Tilføj koden til din projektmappe
Du starter med at indsætte makroens kode i din Excel-arbejdsbog. Sådan gør du:
- Åbn den projektmappe, hvor du vil fremhæve dubletter.
- Tryk på Alt + F11 for at åbne Visual Basic-editoren.
- Højreklik på i venstre rude på ThisWorkbook og vælg Indsæt > Modul fra kontekstmenuen.
- Indsæt koden i vinduet Kode.
- Hvis du vil gemme makroen til fremtidig brug, skal du sørge for at gemme din projektmappe som en makroaktiveret .xlsm-fil.
Alternativt kan du downloade vores prøvearbejdsbog og køre makroen derfra. Prøvearbejdsbogen indeholder følgende makroer:
- HighlightDupesCaseInsensitive - skygger dubletter inden for en celle uden at tage hensyn til bogstaver.
- HighlightDupesCaseSensitive - fremhæver dubletter i en celle under hensyntagen til bogstaver.
Du kan finde flere oplysninger under Sådan indsætter du VBA-kode i Excel.
Kør makroen
Kør makroen på denne måde, når du har koden tilføjet til din egen projektmappe eller har downloadet og åbnet vores prøvefil:
- Vælg de celler i dit regneark, hvor du vil fremhæve dobbelt tekst. Det kan være et område eller flere ikke-tilstødende områder.
- Tryk på Alt + F8 .
- Vælg den ønskede makro, og klik på Kør .
- Makroen vil bede dig om at angive den afgrænser, der adskiller værdierne i de valgte celler. Den forudindstillede afgrænser (et komma og et mellemrum i vores tilfælde) vises automatisk i indtastningsfeltet. Afhængigt af dine behov kan du lade standardafgrænseren stå eller skrive en anden, og derefter klikke på OK.
Et øjeblik senere vil alle duplikerede strenge i de valgte celler blive skraveret med rød farve (eller den skrifttypefarve, der er indstillet i din kode).
Tip. For hurtigt at fjerne dubletter inden for en celle kan du bruge Fjern dubletter af delstrenge, et af de mange tidsbesparende værktøjer, der er inkluderet i vores Ultimate Suite.
Sådan tilpasser du koden til dine behov
Med disse brugsanvisninger og et meget grundlæggende kendskab til VBA (eller blot ved at følge nedenstående vejledning nøje) kan du nemt ændre koderne i overensstemmelse med dine behov.
Placer på samme modul
Som du måske har bemærket, er begge makroer ( HighlightDupesCaseSensitive og HighlightDupesCaseInsensitive ) kalder den HighlightDupeWordsInCell Forskellen mellem de to ovenstående makroer er kun i den tredje parameter (CaseSensitive), der overføres til den nævnte funktion.
For case-sensitiv søgning er den indstillet til TRUE:
Kald HighlightDupeWordsInCell(Cell, Delimiter, True)
For case-insensitiv søgning er den sat til FALSE:
Kald HighlightDupeWordsInCell(Cell, Delimiter, False)
For at makroerne kan fungere, skal koden i HighlightDupeWordsInCell funktionen skal placeres i samme modul som makroerne.
Afgrænser
Når makroen køres, vil makroen bede dig om at angive den afgrænser, der adskiller ord/strenge i de valgte celler. Standardafgrænseren er et komma og et mellemrum (", "), og den er forudindstillet i inputboksen:
Delimiter = InputBox("Angiv den afgrænser, der adskiller værdierne i en celle", "Delimiter", ", ", ")
I din kode kan du frit bruge andre tegn som foruddefinerede afgrænsere i din kode.
Farve
Som standard er HighlightDupeWordsInCell funktionen skygger dubletter i rød skriftfarve. Farven defineres i denne linje:
Cell.Characters(positionInText, Len(word)).Font.Color = vbRed
Her er vbRed en slags VBA-farvekonstant. Hvis du vil vise dubletter i en anden farve, kan du erstatte vbRed med en anden konstant som f.eks. vbGreen, vbYellow, vbBlue, osv. T en liste over understøttede farvekonstanter findes her.
Sådan fremhæver du dobbelte ord i Excel-celler. Jeg takker for din læsning og håber at se dig på vores blog i næste uge!
Tilgængelige downloads
Kodeeksempler til at fremhæve dubletter i en celle (.xlsm-fil)
Ultimate Suite 14-dages fuldt funktionsdygtig version (.exe-fil)