Spis treści
Samouczek pokazuje, jak podświetlić zduplikowane słowa lub ciągi tekstowe wewnątrz komórki za pomocą VBA.
Formatowanie warunkowe w Excelu umożliwia wyróżnianie duplikatów w każdy możliwy sposób: z pierwszym wystąpieniem lub bez, w jednej kolumnie lub wielu kolumnach, kolejnych zduplikowanych komórkach oraz całych wierszach na podstawie identycznych wartości w kluczowej kolumnie. Ale, jak zwykle, jest pewne "ale". Reguły formatowania warunkowego działają na poziomie komórki, podczas gdy możesz chcieć wyróżnić duplikatytekstu, a nie całych komórek. Można to zrobić tylko za pomocą makr. Nawet jeśli nie masz doświadczenia z VBA, nie spiesz się z zamknięciem tej strony. Znajdziesz tu gotowe przykłady kodów i szczegółowe instrukcje, jak je wykorzystać w swoich arkuszach.
Podświetlanie zduplikowanych słów w komórce, ignorując wielkość liter w tekście
Ten przykład pokazuje, jak zacieniować zduplikowane słowa lub ciągi tekstowe w obrębie komórki czerwonym kolorem czcionki, jak pokazano na poniższym obrazku. Proszę zauważyć, że małe i duże litery są traktowane jako te same znaki. Na przykład, pomarańczowy , ORANGE oraz Orange są uważane za to samo słowo.
Kod makra wygląda następująco:
Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Wprowadź delimiter oddzielający wartości w komórce" , "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 As.Boolean = 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 SubPodkreślanie zduplikowanego tekstu w komórce z uwzględnieniem wielkości liter
W większości sytuacji mamy tendencję do ignorowania wielkości liter podczas pracy z wpisami tekstowymi w Excelu. W pewnych okolicznościach jednak wielkość liter w tekście ma znaczenie. Na przykład, jeśli masz do czynienia z identyfikatorami, hasłami lub innymi rekordami tego typu, ciągi takie jak np. 1-AA , 1-aa oraz 1-Aa nie są duplikatami i nie powinny być wyróżnione:
W takim przypadku należy użyć następującej wersji kodu:
Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Wprowadź delimiter oddzielający wartości w komórce" , "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 As.Boolean = 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 SubJak używać makr do podświetlania zduplikowanych słów w Excelu
Jeśli jesteś początkującym użytkownikiem VBA, poniższe instrukcje krok po kroku wygodnie poprowadzą Cię przez ten proces. Doświadczeni użytkownicy mogą po prostu wybrać link do pobrania i pominąć resztę :)
Dodaj kod do swojego skoroszytu
Zaczynasz od wstawienia kodu makra do swojego skoroszytu Excela, oto jak:
- Otwórz skoroszyt, w którym chcesz zaznaczyć duplikaty.
- Naciśnij Alt + F11, aby otworzyć edytor Visual Basic.
- W lewym panelu kliknij prawym przyciskiem myszy ThisWorkbook i wybrać Wkładka > Moduł z menu kontekstowego.
- Wklejenie kodu w oknie Code.
- Aby zachować makro do przyszłego użytku, pamiętaj, aby zapisać swój skoroszyt jako plik .xlsm z obsługą makr.
Alternatywnie można pobrać nasz przykładowy skoroszyt i z niego uruchomić makro. Przykładowy skoroszyt zawiera następujące makra:
- HighlightDupesCaseInsensitive - wyłuskuje duplikaty wewnątrz komórki ignorując wielkość liter.
- HighlightDupesCaseSensitive - podświetla duplikaty w komórce z uwzględnieniem wielkości liter.
Więcej informacji znajdziesz w rozdziale Jak wstawić kod VBA w programie Excel.
Uruchom makro
Mając dodany kod do własnego skoroszytu lub pobrany i otwarty nasz przykładowy plik, uruchom makro w ten sposób:
- W swoim arkuszu wybierz komórki, w których chcesz podświetlić zduplikowany tekst. Może to być jeden zakres lub wiele niesąsiadujących zakresów.
- Naciśnij Alt + F8 .
- Wybierz interesujące Cię makro i kliknij Uruchom .
- Makro poprosi Cię o określenie delimitera oddzielającego wartości w wybranych komórkach. Wstępnie ustawiony delimiter (w naszym przypadku przecinek i spacja) pojawi się w polu wejściowym automatycznie. W zależności od potrzeb możesz pozostawić domyślny delimiter lub wpisać inny, a następnie kliknąć OK.
Chwilę później wszystkie zduplikowane ciągi znaków w wybranych komórkach zostaną zacieniowane czerwonym kolorem (lub jakimkolwiek kolorem czcionki ustawionym w Twoim kodzie).
Wskazówka. Aby szybko usuwać duplikaty w obrębie komórki, można skorzystać z funkcji Remove Duplicate Substrings, jednego z wielu narzędzi oszczędzających czas, zawartych w naszym pakiecie Ultimate Suite.
Jak dostosować kod do swoich potrzeb
Mając te uwagi i podstawową znajomość VBA (lub po prostu ściśle przestrzegając poniższych instrukcji), możesz łatwo zmodyfikować kody dokładnie według swoich potrzeb.
Umieścić na tym samym module
Jak można zauważyć, oba makra ( HighlightDupesCaseSensitive oraz HighlightDupesCaseInsensitive ) wywołują. HighlightDupeWordsInCell Różnica między dwoma powyższymi makrami polega jedynie na 3. parametrze (CaseSensitive) przekazywanym do wspomnianej funkcji.
W przypadku wyszukiwania z uwzględnieniem wielkości liter jest ustawiona na TRUE:
Wywołaj HighlightDupeWordsInCell(Cell, Delimiter, True)
Dla wyszukiwania bez rozróżniania wielkości liter jest ustawiona na FALSE:
Call HighlightDupeWordsInCell(Cell, Delimiter, False)
Aby makra działały, kod z HighlightDupeWordsInCell Funkcja musi być umieszczona w tym samym module co makra.
Delimiter
Po uruchomieniu makro poprosi o podanie separatora oddzielającego słowa/ciągi w wybranych komórkach. Domyślnym separatorem jest przecinek i spacja (", ") i jest on wstępnie ustawiony w InputBox:
Delimiter = InputBox("Podaj delimiter oddzielający wartości w komórce", "Delimiter", ", ")
W swoim kodzie możesz swobodnie używać dowolnego innego znaku (znaków) jako predefiniowanego ogranicznika.
Kolor
Domyślnie HighlightDupeWordsInCell Funkcja cieniuje duplikaty czerwonym kolorem czcionki. Kolor jest zdefiniowany w tej linii:
Cell.Characters(positionInText, Len(word)).Font.Color = vbRed
Tutaj vbRed jest rodzajem stałej koloru VBA. Aby wyświetlić duplikaty w innym kolorze, można zastąpić vbRed inną stałą, np. vbGreen, vbYellow, vbBlue, itd. T Lista obsługiwanych stałych kolorów znajduje się tutaj.
Oto jak podświetlić zduplikowane słowa w komórkach Excela. Dziękuję za przeczytanie i mam nadzieję, że zobaczymy się na naszym blogu za tydzień!
Dostępne pliki do pobrania
Przykłady kodu do podświetlania duplikatów w komórce (plik .xlsm)
Ultimate Suite 14-dniowa w pełni funkcjonalna wersja (plik .exe)