Obsah
Tento návod ukazuje, jak pomocí VBA zvýraznit duplicitní slova nebo textové řetězce v buňce.
Podmíněné formátování aplikace Excel umožňuje zvýraznit duplicity všemi možnými způsoby, které vás napadnou: s 1. výskytem nebo bez něj, v jednom sloupci nebo ve více sloupcích, v po sobě jdoucích duplicitních buňkách a v celých řádcích na základě stejných hodnot v klíčovém sloupci. Jako obvykle je tu však jedno "ale". Pravidla podmíněného formátování fungují na úrovni buněk, zatímco vy můžete chtít zvýraznit duplicity.textu, nikoliv celých buněk. To lze provést pouze pomocí maker. I když nemáte s VBA žádné zkušenosti, nespěchejte se zavřením této stránky. Najdete zde příklady hotových kódů a podrobné pokyny, jak je použít ve svých pracovních listech.
Zvýraznění duplicitních slov v buňce bez ohledu na velikost písmen textu
Tento příklad ukazuje, jak vystínovat duplicitní slova nebo textové řetězce v buňce červenou barvou písma, jak je znázorněno na obrázku níže. Všimněte si, že malá a velká písmena jsou považována za stejné znaky. Například, oranžová , ORANGE a Orange jsou považovány za stejné slovo.
Kód makra je následující:
Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Zadejte oddělovač, který odděluje hodnoty v buňce" , "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 SubZvýraznění duplicitního textu v buňce s ohledem na velikost písmen
Ve většině situací máme tendenci při práci s textovými záznamy v Excelu ignorovat velikost písmen. Za určitých okolností však na velikosti písmen v textu záleží. Pokud například pracujete s ID, hesly nebo jinými záznamy tohoto druhu, řetězce jako např. 1-AA , 1-aa a 1-Aa nejsou duplicitní a neměly by být zvýrazněny:
V tomto případě použijte následující verzi kódu:
Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Zadejte oddělovač, který odděluje hodnoty v buňce" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, True ) Next End 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 SubJak používat makra ke zvýraznění duplicitních slov v aplikaci Excel
Pokud jste v používání VBA začátečníci, níže uvedené pokyny vás jím pohodlně provedou krok za krokem. Zkušení uživatelé si mohou vybrat odkaz ke stažení a zbytek přeskočit :)
Přidejte kód do sešitu
Začněte vložením kódu makra do sešitu aplikace Excel. Zde je uveden postup:
- Otevřete sešit, ve kterém chcete zvýraznit duplicity.
- Stisknutím kláves Alt + F11 otevřete editor jazyka Visual Basic.
- V levém podokně klikněte pravým tlačítkem myši na ThisWorkbook a vyberte Vložte > Modul z kontextové nabídky.
- Vložte kód do okna Kód.
- Chcete-li makro uchovat pro budoucí použití, nezapomeňte sešit uložit jako soubor .xlsm s podporou maker.
Můžete si také stáhnout náš ukázkový sešit a spustit makro z něj. Ukázkový sešit obsahuje následující makra:
- HighlightDupesCaseInsensitive - odstíny duplikátů v buňce bez ohledu na velikost písmen.
- HighlightDupesCaseSensitive - zvýrazní duplikáty v buňce s ohledem na velikost písmen.
Další informace naleznete v části Jak vložit kód VBA do aplikace Excel.
Spuštění makra
Po přidání kódu do vlastního sešitu nebo po stažení a otevření našeho ukázkového souboru spusťte makro tímto způsobem:
- V pracovním listu vyberte buňky, ve kterých chcete zvýraznit duplicitní text. Může to být jeden rozsah nebo více nesousedících rozsahů.
- Stiskněte klávesy Alt + F8 .
- Vyberte makro, které vás zajímá, a klikněte na tlačítko Spustit .
- Makro vás požádá o zadání oddělovače, který oddělí hodnoty ve vybraných buňkách. Ve vstupním poli se automaticky zobrazí přednastavený oddělovač (v našem případě čárka a mezera). Podle svých potřeb můžete ponechat výchozí oddělovač nebo zadat jiný a kliknout na tlačítko OK.
O chvíli později budou všechny duplicitní řetězce ve vybraných buňkách vystínovány červenou barvou (nebo jakoukoli barvou písma nastavenou v kódu).
Tip. Chcete-li rychle odstranit duplikáty v buňce, můžete použít nástroj Odstranit duplicitní podřetězce, který je jedním z mnoha nástrojů pro úsporu času obsažených v naší sadě Ultimate Suite.
Jak upravit kód pro své potřeby
S těmito poznámkami k použití a velmi základní znalostí jazyka VBA (nebo jen podle níže uvedených pokynů) můžete kódy snadno upravit přesně podle svých potřeb.
Umístění na stejný modul
Jak jste si mohli všimnout, obě makra ( HighlightDupesCaseSensitive a HighlightDupesCaseInsensitive ) zavolat HighlightDupeWordsInCell Rozdíl mezi oběma výše uvedenými makry je pouze ve 3. parametru (CaseSensitive) předávaném uvedené funkci.
Pro vyhledávání rozlišující malá a velká písmena je nastavena na hodnotu TRUE:
Volat HighlightDupeWordsInCell(Cell, Delimiter, True)
Pro vyhledávání bez rozlišení velkých a malých písmen je nastavena na hodnotu FALSE:
Volat HighlightDupeWordsInCell(Cell, Delimiter, False)
Aby makra fungovala, musí být kód příkazu HighlightDupeWordsInCell musí být umístěna ve stejném modulu jako makra.
Oddělovač
Po spuštění bude makro požádáno o zadání oddělovače, který oddělí slova/řetězce ve vybraných buňkách. Výchozí oddělovač je čárka a mezera (", ") a je přednastaven ve vstupním poli:
Delimiter = InputBox("Zadejte oddělovač, který odděluje hodnoty v buňce", "Delimiter", ", ")
V kódu můžete jako předdefinovaný oddělovač použít libovolný jiný znak (znaky).
Barva
Ve výchozím nastavení je HighlightDupeWordsInCell funkce odstíní duplikáty červenou barvou písma. Barva je definována v tomto řádku:
Cell.Characters(positionInText, Len(word)).Font.Color = vbRed
Zde je vbRed jakousi barevnou konstantou VBA. Chcete-li duplikáty zobrazit jinou barvou, můžete vbRed nahradit jinou konstantou, například vbGreen, vbYellow, vbBlue atd. T eznam podporovaných barevných konstant najdete zde.
Takto se zvýrazňují duplicitní slova v buňkách aplikace Excel. Děkuji vám za přečtení a doufám, že se příští týden uvidíme na našem blogu!
Dostupné soubory ke stažení
Příklady kódu pro zvýraznění duplicit v buňce (.xlsm soubor)
Ultimate Suite 14denní plně funkční verze (.exe soubor)