Как да маркирате дублиран текст / думи в клетка на Excel

  • Споделя Това
Michael Brown

В урока е показано как да маркирате дублиращи се думи или текстови низове в клетка с помощта на VBA.

Условното форматиране в Excel дава възможност да се подчертават дубликати по всички възможни начини, за които се сещате: със или без 1-ви повторения, в една колона или в няколко колони, последователни дублиращи се клетки и цели редове въз основа на идентични стойности в ключова колона. Но, както обикновено, има едно "но". Правилата за условно форматиране работят на ниво клетка, докато вие може да искате да подчертаете дублиращи сетекст, а не цели клетки. Това може да се направи само с макроси. Дори да нямате никакъв опит с VBA, не бързайте да затваряте тази страница. Тук ще намерите готови за използване примери за код и подробни инструкции как да ги използвате в работните си листове.

    Подчертаване на дублиращи се думи в клетка, като се игнорира корпусът на текста

    Този пример показва как да засенчите дублиращи се думи или текстови низове в клетка с червен цвят на шрифта, както е показано на изображението по-долу. Обърнете внимание, че малките и главните букви се третират като едни и същи символи. Например, оранжев , ORANGE и Orange се считат за една и съща дума.

    Кодът на макроса е следният:

    Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Въведете разделителя, който разделя стойностите в клетката" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, False ) 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 Sub

    Подчертаване на дублиран текст в клетка с отчитане на големината на буквите

    В повечето случаи сме склонни да пренебрегваме регистъра на буквите, когато работим с текстови записи в Excel. При определени обстоятелства обаче регистърът на текста е от значение. Например, ако работите с идентификационни номера, пароли или други записи от този вид, низове като 1-AA , 1аа и 1-Aa не се дублират и не трябва да се подчертават:

    В този случай използвайте следната версия на кода:

    Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Въведете разделителя, който разделя стойностите в клетката" , "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 Sub

    Как да използвате макросите за подчертаване на дублиращи се думи в Excel

    Ако сте начинаещ в използването на VBA, инструкциите стъпка по стъпка по-долу ще ви помогнат да преминете удобно през тях. Опитните потребители могат просто да изберат връзката за изтегляне и да пропуснат останалото :)

    Добавете кода в работната си книга

    Започвате с вмъкване на кода на макроса в работната книга на Excel. Ето как:

    1. Отворете работната книга, в която искате да маркирате дублиращите се файлове.
    2. Натиснете Alt + F11, за да отворите редактора на Visual Basic.
    3. В левия прозорец щракнете с десния бутон на мишката върху Тази работна книга и изберете Вмъкване на > Модул от контекстното меню.
    4. Поставете кода в прозореца Код.
    5. За да запазите макроса за бъдеща употреба, не забравяйте да запазите работната си книга като файл .xlsm с активиран макрос.

    Можете също така да изтеглите нашата примерна работна книга и да стартирате макроса от нея. Примерната работна книга съдържа следните макроси:

    • HighlightDupesCaseInsensitive - засенчва дубликати в клетка, без да се вземат предвид буквените знаци.
    • HighlightDupesCaseSensitive - подчертава дубликатите в дадена клетка, като взема предвид големината на буквите.

    За повече информация вижте Как да вмъкнем VBA код в Excel.

    Изпълнение на макроса

    След като добавите кода към собствената си работна книга или изтеглите и отворите нашия примерен файл, стартирайте макроса по този начин:

    1. В работния лист изберете клетките, в които искате да подчертаете дублирания текст. Това може да бъде един диапазон или няколко несъседни диапазона.
    2. Натиснете Alt + F8 .
    3. Изберете макроса, който ви интересува, и щракнете върху Изпълнявайте .

    4. Макросът ще ви помоли да посочите разделителя, който разделя стойностите в избраните клетки. Предварително зададеният разделител (запетая и интервал в нашия случай) ще се появи автоматично в полето за въвеждане. В зависимост от нуждите си можете да оставите разделителя по подразбиране или да въведете друг, след което щракнете върху OK.

    След малко всички дублиращи се низове в избраните клетки ще бъдат оцветени в червено (или какъвто цвят на шрифта е зададен в кода ви).

    Съвет. За бързо премахване на дубликати в клетка, можете да използвате функцията за премахване на дублирани поднизове - един от многото инструменти за пестене на време, включени в нашия Ultimate Suite.

    Как да адаптирате кода за вашите нужди

    С тези бележки за употреба и с основни познания за VBA (или просто като следвате стриктно инструкциите по-долу) можете лесно да модифицирате кодовете в съответствие с вашите нужди.

    Поставете в същия модул

    Както може би сте забелязали, и двата макроса ( HighlightDupesCaseSensitive и HighlightDupesCaseInsensitive ) извикайте HighlightDupeWordsInCell Разликата между двата макроса по-горе е само в третия параметър (CaseSensitive), който се предава на посочената функция.

    За търсене с отчитане на големи и малки букви се задава стойност TRUE:

    Извикайте HighlightDupeWordsInCell(Cell, Delimiter, True)

    За търсене без разлика на големината на буквите се задава стойност FALSE:

    Извикайте HighlightDupeWordsInCell(Cell, Delimiter, False)

    За да работят макросите, кодът на HighlightDupeWordsInCell Функцията трябва да бъде поставена в същия модул, в който са разположени макросите.

    Разделител

    При стартиране макросът ще ви помоли да посочите разделителя, който разделя думите/низовете в избраните клетки. По подразбиране разделителят е запетая и интервал (", ") и е предварително зададен в InputBox:

    Delimiter = InputBox("Посочете разделителя, който разделя стойностите в клетката", "Delimiter", ", ")

    В кода си можете да използвате всеки друг символ(и) като предварително дефиниран разделител.

    Цвят

    По подразбиране HighlightDupeWordsInCell Функцията засенчва дубликатите с червен цвят на шрифта. Цветът е определен в този ред:

    Cell.Characters(positionInText, Len(word)).Font.Color = vbRed

    Тук vbRed е нещо като константа за цвят във VBA. За да покажете дубликатите в различен цвят, можете да замените vbRed с друга константа, например vbGreen, vbYellow, vbBlue и т.н. T описът на поддържаните константи за цвят може да бъде намерен тук.

    Това е начинът за подчертаване на дублиращи се думи в клетките на Excel. Благодаря ви, че прочетохте, и се надявам да се видим в нашия блог следващата седмица!

    Налични изтегляния

    Примерни кодове за маркиране на дубликати в клетка (.xlsm файл)

    Ultimate Suite 14-дневна напълно функционална версия (.exe файл)

    Майкъл Браун е отдаден технологичен ентусиаст със страст към опростяване на сложни процеси с помощта на софтуерни инструменти. С повече от десетилетие опит в технологичната индустрия, той е усъвършенствал уменията си в Microsoft Excel и Outlook, както и в Google Sheets и Docs. Блогът на Майкъл е посветен на споделянето на неговите знания и опит с други, предоставяйки лесни за следване съвети и уроци за подобряване на продуктивността и ефективността. Независимо дали сте опитен професионалист или начинаещ, блогът на Michael предлага ценни прозрения и практически съвети за извличане на максимума от тези основни софтуерни инструменти.