Innehållsförteckning
I handledningen visas hur du markerar dubbla ord eller textsträngar i en cell med hjälp av VBA.
Excel Villkorlig formatering gör det möjligt att markera dubbletter på alla möjliga sätt du kan tänka dig: med eller utan 1:a förekomst, i en enda kolumn eller flera kolumner, på varandra följande dubblettceller och hela rader baserade på identiska värden i en nyckelkolumn. Men som vanligt finns det ett "men". Regler för villkorlig formatering fungerar på cellnivå, medan du kanske vill markera dubbletter.text i stället för hela celler. Detta kan endast göras med makron. Även om du inte har någon erfarenhet av VBA, ska du inte skynda dig att stänga den här sidan. Här hittar du färdiga kodexempel och detaljerade instruktioner om hur du använder dem i dina kalkylblad.
Markera dubbla ord i en cell och ignorera textfältet
Det här exemplet visar hur du kan skugga dubbla ord eller textsträngar i en cell med röd teckensnittsfärg som i bilden nedan. Observera att små och stora bokstäver behandlas som samma tecken. Till exempel, apelsin , ORANGE och Orange anses vara samma ord.
Makrot är kodat enligt följande:
Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Ange den avgränsare som separerar värden i en cell" , "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) Då 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 SubMarkera duplicerad text i en cell med hänsyn till skiftläget
I de flesta situationer tenderar vi att strunta i bokstavsbokstäverna när vi arbetar med textposter i Excel. Under vissa omständigheter spelar dock bokstavsbokstäverna roll. Om du till exempel arbetar med ID, lösenord eller andra poster av det slaget, kan strängar som 1-AA , 1-aa och 1-Aa är inte dubblerade och bör inte markeras:
I det här fallet använder du följande version av koden:
Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Ange den avgränsare som separerar värden i en cell" , "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) Då 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 SubHur du använder makron för att markera dubbla ord i Excel
Om du är nybörjare i VBA kan du följa nedanstående steg-för-steg-instruktioner. Erfarna användare kan välja nedladdningslänken och hoppa över resten :)
Lägg till koden i arbetsboken
Du börjar med att infoga makrokoden i din Excel-arbetsbok. Så här gör du:
- Öppna arbetsboken där du vill markera dubbletter.
- Tryck på Alt + F11 för att öppna Visual Basic Editor.
- I den vänstra rutan högerklickar du på Denna arbetsbok och välj Infoga > Modul från kontextmenyn.
- Klistra in koden i fönstret Kod.
- Om du vill behålla makrot för framtida användning ska du spara arbetsboken som en makroaktiverad .xlsm-fil.
Alternativt kan du ladda ner vår exempelarbetsbok och köra makrot från den. Exempelarbetsboken innehåller följande makron:
- HighlightDupesCaseInsensitive - skuggar dubbletter inom en cell utan att ta hänsyn till bokstavsbokstäver.
- HighlightDupesCaseSensitive - markerar dubbletter i en cell med hänsyn till bokstavsbokstäverna.
För mer information, se Hur du infogar VBA-kod i Excel.
Kör makrot
När koden har lagts till i din egen arbetsbok eller när du har laddat ner och öppnat vår exempelfil kör du makrot på följande sätt:
- Markera de celler i kalkylbladet där du vill markera dubbel text. Det kan vara ett intervall eller flera icke angränsande intervall.
- Tryck på Alt + F8 .
- Välj det intressanta makrot och klicka på Kör .
- Makrot kommer att be dig ange vilken avgränsare som ska separera värdena i de markerade cellerna. Den förinställda avgränsaren (ett kommatecken och ett mellanslag i vårt fall) visas automatiskt i inmatningsrutan. Beroende på dina behov kan du lämna den förinställda avgränsaren eller skriva en annan och sedan klicka på OK.
En stund senare kommer alla dubbla strängar i de markerade cellerna att skuggas med röd färg (eller vilken typsnittsfärg som helst i din kod).
Tips: För att snabbt ta bort dubbletter inom en cell kan du använda Remove Duplicate Substrings, ett av många tidsbesparande verktyg som ingår i vår Ultimate Suite.
Hur du anpassar koden till dina behov
Med hjälp av dessa användningsanvisningar och grundläggande kunskaper i VBA (eller genom att följa instruktionerna nedan) kan du enkelt ändra koderna i enlighet med dina behov.
Placera på samma modul
Som du kanske märker är båda makron ( HighlightDupesCaseSensitive och HighlightDupesCaseInsensitive ) ringa in den HighlightDupeWordsInCell Skillnaden mellan de två makron ovan är endast den tredje parametern (CaseSensitive) som skickas till funktionen.
För skiftlägeskänslig sökning sätts den till TRUE:
Kalla HighlightDupeWordsInCell(Cell, Delimiter, True)
För sökning som inte tar hänsyn till stor bokstavsgränser är den inställd på FALSE:
Kalla HighlightDupeWordsInCell(Cell, Delimiter, False)
För att makron ska fungera måste koden i HighlightDupeWordsInCell funktionen måste placeras i samma modul som makron.
Avgränsare
När makrot körs ber makrot dig ange vilken avgränsare som skiljer ord/strängar åt i de valda cellerna. Standardavgränsaren är ett kommatecken och ett mellanslag (", ") och den är förinställd i InputBox:
Delimiter = InputBox("Ange den avgränsare som separerar värden i en cell", "Delimiter", ", ", ")
I din kod kan du fritt använda andra tecken som fördefinierad avgränsare.
Färg
Som standard är HighlightDupeWordsInCell funktionen skuggar dubbletter med röd typsnittsfärg. Färgen definieras på den här raden:
Cell.Characters(positionInText, Len(word)).Font.Color = vbRed
Här är vbRed en slags VBA-färgkonstant. Om du vill visa dubbletter i en annan färg kan du ersätta vbRed med en annan konstant, t.ex. vbGreen, vbYellow, vbBlue, etc. T en lista över färgkonstanter som stöds finns här.
Så här markerar du dubbla ord i Excel-celler. Tack för att du läste och hoppas att vi ses på vår blogg nästa vecka!
Tillgängliga nedladdningar
Kodexempel för att markera dubbletter i en cell (.xlsm-fil)
Ultimate Suite 14-dagars fullt fungerande version (.exe-fil)