Obsah
Tento návod ukazuje, ako zvýrazniť duplicitné slová alebo textové reťazce v bunke pomocou VBA.
Podmienené formátovanie programu Excel umožňuje zvýrazniť duplicity všetkými možnými spôsobmi, ktoré vás napadnú: s 1. výskytom alebo bez neho, v jednom stĺpci alebo vo viacerých stĺpcoch, v po sebe idúcich duplicitných bunkách a v celých riadkoch na základe rovnakých hodnôt v kľúčovom stĺpci. Ako zvyčajne je tu však "ale". Pravidlá podmieneného formátovania fungujú na úrovni buniek, zatiaľ čo vy môžete chcieť zvýrazniť duplicitytextu, a nie celých buniek. Toto je možné vykonať len pomocou makier. Aj keď nemáte žiadne skúsenosti s VBA, neponáhľajte sa so zatvorením tejto stránky. Nájdete tu príklady kódu pripravené na použitie a podrobné pokyny, ako ich použiť vo svojich pracovných hárkoch.
Zvýraznenie duplicitných slov v bunke bez ohľadu na veľkosť písmen textu
Tento príklad ukazuje, ako odtieniť duplicitné slová alebo textové reťazce v bunke červenou farbou písma, ako je znázornené na obrázku nižšie. Všimnite si, že malé a veľké písmená sa považujú za rovnaké znaky. Napríklad oranžová , ORANGE a Oranžová sa považujú za to isté slovo.
Kód makra je nasledujúci:
Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Zadajte oddeľovač, ktorý oddeľuje hodnoty v bunke" , "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ýraznenie duplicitného textu v bunke s ohľadom na veľkosť písmen
Vo väčšine situácií máme tendenciu ignorovať veľkosť písmen pri práci s textovými záznamami v programe Excel. Za určitých okolností však na veľkosti písmen v texte záleží. Napríklad, ak pracujete s identifikačnými číslami, heslami alebo inými záznamami tohto druhu, reťazce ako napr. 1-AA , 1-aa a 1-Aa nie sú duplicitné a nemali by sa zvýrazňovať:
V tomto prípade použite nasledujúcu verziu kódu:
Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Zadajte oddeľovač, ktorý oddeľuje hodnoty v bunke" , "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 SubAko používať makrá na zvýraznenie duplicitných slov v programe Excel
Ak ste začiatočník v používaní VBA, nižšie uvedené pokyny vás pohodlne prevedú krok za krokom. Skúsení používatelia si môžu jednoducho vybrať odkaz na stiahnutie a zvyšok preskočiť :)
Pridanie kódu do zošita
Začnete vložením kódu makra do zošita programu Excel:
- Otvorte zošit, v ktorom chcete zvýrazniť duplikáty.
- Stlačením klávesov Alt + F11 otvorte editor jazyka Visual Basic.
- Na ľavom paneli kliknite pravým tlačidlom myši na Tento pracovný zošit a vyberte Vložte > Modul z kontextového menu.
- Vložte kód do okna Kód.
- Ak chcete makro zachovať na ďalšie použitie, nezabudnite zošit uložiť ako súbor .xlsm s povolenými makrami.
Prípadne si môžete stiahnuť náš vzorový zošit a spustiť makro z neho. Vzorový zošit obsahuje nasledujúce makrá:
- HighlightDupesCaseInsensitive - odtieni duplikáty v rámci bunky, pričom ignoruje veľkosť písmen.
- HighlightDupesCaseSensitive - zvýrazní duplikáty v bunke s ohľadom na veľkosť písmen.
Ďalšie informácie nájdete v časti Ako vložiť kód VBA do aplikácie Excel.
Spustenie makra
Po pridaní kódu do vlastného zošita alebo po stiahnutí a otvorení nášho vzorového súboru spustite makro týmto spôsobom:
- V pracovnom hárku vyberte bunky, v ktorých chcete zvýrazniť duplicitný text. Môže to byť jeden rozsah alebo viacero nesúvisiacich rozsahov.
- Stlačte Alt + F8 .
- Vyberte makro, ktoré vás zaujíma, a kliknite na tlačidlo Spustiť .
- Makro vás požiada o zadanie oddeľovača, ktorý oddeľuje hodnoty vo vybraných bunkách. Vo vstupnom poli sa automaticky zobrazí prednastavený oddeľovač (v našom prípade čiarka a medzera). V závislosti od vašich potrieb môžete ponechať predvolený oddeľovač alebo zadať iný a potom kliknite na tlačidlo OK.
O chvíľu neskôr budú všetky duplicitné reťazce vo vybraných bunkách odtienené červenou farbou (alebo akoukoľvek farbou písma nastavenou vo vašom kóde).
Tip. Ak chcete rýchlo odstrániť duplikáty v bunke, môžete použiť funkciu Odstrániť duplicitné podreťazce, ktorá je jedným z mnohých nástrojov na úsporu času, ktoré sú súčasťou nášho balíka Ultimate Suite.
Ako upraviť kód pre svoje potreby
S týmito poznámkami k použitiu a veľmi základnými znalosťami jazyka VBA (alebo len s dôsledným dodržiavaním nižšie uvedených pokynov) môžete kódy ľahko upraviť presne podľa svojich potrieb.
Umiestnite na ten istý modul
Ako ste si mohli všimnúť, obe makrá ( HighlightDupesCaseSensitive a HighlightDupesCaseInsensitive ) zavolajte HighlightDupeWordsInCell Rozdiel medzi týmito dvoma makrami je len v 3. parametri (CaseSensitive), ktorý sa odovzdáva uvedenej funkcii.
Pri vyhľadávaní s rozlišovaním veľkých a malých písmen je nastavená na hodnotu TRUE:
Vyvolať HighlightDupeWordsInCell(Cell, Delimiter, True)
Pre vyhľadávanie bez rozlišovania veľkých a malých písmen je nastavená na FALSE:
Vyvolať HighlightDupeWordsInCell(Cell, Delimiter, False)
Aby makrá fungovali, musí byť kód HighlightDupeWordsInCell funkcia musí byť umiestnená v tom istom module ako makrá.
Oddeľovač
Po spustení vás makro požiada o zadanie oddeľovača, ktorý oddeľuje slová/reťazce vo vybraných bunkách. Predvolený oddeľovač je čiarka a medzera (", ") a je prednastavený vo vstupnom poli:
Delimiter = InputBox("Zadajte oddeľovač, ktorý oddeľuje hodnoty v bunke", "Delimiter", ", ")
V kóde môžete ako preddefinovaný oddeľovač použiť akýkoľvek iný znak (znaky).
Farba
V predvolenom nastavení HighlightDupeWordsInCell funkcia odtieni duplikáty červenou farbou písma. Farba je definovaná v tomto riadku:
Cell.Characters(positionInText, Len(word)).Font.Color = vbRed
Tu je vbRed akousi farebnou konštantou VBA. Ak chcete duplikáty zobraziť inou farbou, môžete vbRed nahradiť inou konštantou, napríklad vbGreen, vbYellow, vbBlue, atď T zoznam podporovaných farebných konštánt nájdete tu.
Takto sa zvýrazňujú duplicitné slová v bunkách programu Excel. Ďakujem vám za prečítanie a dúfam, že sa na našom blogu uvidíme budúci týždeň!
Dostupné súbory na stiahnutie
Príklady kódu na zvýraznenie duplikátov v bunke (.xlsm súbor)
14-dňová plne funkčná verzia balíka Ultimate Suite (.exe súbor)