В этой статье мы воспользуемся методом find объекта Range, чтобы выделить ячейку, содержащую значение, подобное поисковым словам.

Исходные данные для этого примера состоят из названия компании, идентификатора сотрудника и имени сотрудника. У нас есть необработанные данные от разных компаний.

В этом примере мы хотим найти и выделить ячейку, которая соответствует определенному названию компании в ячейке I8.

ArrowRawData

Чтобы выделить ячейки с определенными названиями компаний, введите название компании в ячейку I8 и нажмите кнопку «Отправить». Кнопке «Отправить» назначен макрос «HighlightMatchingResult».

ArrowCallingFunction

Макрос HighlightMatchingResult выделит желтым цветом ячейку, содержащую соответствующее название компании.

ArrowOutput

Логическое объяснение

В этом примере мы создали настраиваемую функцию «FindRange» и макрос «HighlightMatchingResult».

Пользовательская функция «FindRange» создаст диапазон со всеми ячейками, которые содержат значение, аналогичное названию искомой компании.

Макрос HighlightMatchingResult вызовет пользовательскую функцию и выделит желтым цветом диапазон, возвращаемый пользовательской функцией.

Объяснение кода

SearchRange.Find (What: = FindItem)

Приведенный выше код используется для поиска ячейки, которая содержит значение, подобное FindItem.

Объединение (FindRange, MatchingRange)

Приведенный выше код используется для объединения двух диапазонов в один диапазон.

SearchRange.FindNext (MatchingRange)

Приведенный выше код используется для поиска следующей ячейки, которая содержит значение, подобное FindItem.

Пожалуйста, введите код ниже

Option Explicit

Function FindRange(FindItem As Variant, SearchRange As Range) As Range

'Declaring variables

Dim MatchingRange As Range

Dim FirstAddress As String

With SearchRange



'Finding the range whose value match with FindItem

Set MatchingRange = .Find(What:=FindItem)



'Checking whether any match exist

If Not MatchingRange Is Nothing Then



Set FindRange = MatchingRange

'Getting the address of first matching range

FirstAddress = MatchingRange.Address



Do

'Union of all the ranges whose value match with FindItem

Set FindRange = Union(FindRange, MatchingRange)

'Finding the next range whose value match with FindItem

Set MatchingRange = .FindNext(MatchingRange)

Loop While MatchingRange.Address <> FirstAddress

End If



End With

End Function

Sub HighlightMatchingResult()

'Declaring variables

Dim MappingRange As Range

Dim UserInput As String

'Getting value input by user from cell I8

UserInput = Range("I8").Value

'Calling FindRange custom function

Set MappingRange = FindRange(UserInput, ActiveSheet.Columns("A"))

'Highlighting the mapped range with Yellow color

MappingRange.Interior.Color = RGB(255, 255, 0)

End Sub

Если вам понравился этот блог, поделитесь им с друзьями на Facebook и Facebook.

Мы будем рады услышать от вас, дайте нам знать, как мы можем улучшить нашу работу и сделать ее лучше для вас. Напишите нам на [email protected]