Съдържание
В урока е показано как да маркирате дублиращи се думи или текстови низове в клетка с помощта на 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. Ето как:
- Отворете работната книга, в която искате да маркирате дублиращите се файлове.
- Натиснете Alt + F11, за да отворите редактора на Visual Basic.
- В левия прозорец щракнете с десния бутон на мишката върху Тази работна книга и изберете Вмъкване на > Модул от контекстното меню.
- Поставете кода в прозореца Код.
- За да запазите макроса за бъдеща употреба, не забравяйте да запазите работната си книга като файл .xlsm с активиран макрос.
Можете също така да изтеглите нашата примерна работна книга и да стартирате макроса от нея. Примерната работна книга съдържа следните макроси:
- HighlightDupesCaseInsensitive - засенчва дубликати в клетка, без да се вземат предвид буквените знаци.
- HighlightDupesCaseSensitive - подчертава дубликатите в дадена клетка, като взема предвид големината на буквите.
За повече информация вижте Как да вмъкнем VBA код в Excel.
Изпълнение на макроса
След като добавите кода към собствената си работна книга или изтеглите и отворите нашия примерен файл, стартирайте макроса по този начин:
- В работния лист изберете клетките, в които искате да подчертаете дублирания текст. Това може да бъде един диапазон или няколко несъседни диапазона.
- Натиснете Alt + F8 .
- Изберете макроса, който ви интересува, и щракнете върху Изпълнявайте .
- Макросът ще ви помоли да посочите разделителя, който разделя стойностите в избраните клетки. Предварително зададеният разделител (запетая и интервал в нашия случай) ще се появи автоматично в полето за въвеждане. В зависимост от нуждите си можете да оставите разделителя по подразбиране или да въведете друг, след което щракнете върху 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 файл)