Подключил это как есть в моем VBE, и я даже не смог скомпилировать.
Эта строка
StringFind = MyMatch(rng(I), source)
необходимо изменить на
StringFind = MyMatch(rng(I).Value, source)
чтобы даже заставить его работать на меня. Это МОЖЕТ стать причиной вашей проблемы.
EDIT
Хорошо, я рассмотрел все более подробно. Похоже, это будет работать для вас. (Извините, я не хотел просто сделать все это для вас, но вот оно.) Вероятно, нужно еще немного настроить, чтобы это работало для ваших нужд.
Проблема заключалась в том, что вы искали неопределенные типы данных (добавлен / изменен вызов основной функции на As String
и As Range
). Хотя неопределенные типы могут работать, я думаю, что было сложно понять, почему возникла проблема. Я пытался установить точку останова в функции и даже не зашел так далеко, потому что передавался неправильный тип данных. Лично я всегда использую Option Explicit
, чтобы предотвратить подобные проблемы в моем собственном коде.
Приведенный ниже код будет искать значение в первом аргументе (Search
, может быть "" текст / String
или отдельную ячейку / Range
) для всех значений во втором аргументе (Source
a Range
(состоит из одной или нескольких ячеек).
Public Function StringFind(Search As String, Source As Range)
Dim rngCell As Range
For Each rngCell In Source.Cells
StringFind = MyMatch(Search, rngCell.Value)
If StringFind = "MATCH" Then Exit Function
Next rngCell
StringFind = "NO MATCH"
End Function
Function MyMatch(FindText As String, WithinText As Variant) As String
'
Dim vntFind As Variant
For Each vntFind In Split(UCase(FindText), " ")
If Len(Trim(vntFind)) > 0 Then
If vntFind = Trim(UCase(WithinText)) Then
MyMatch = "MATCH"
Exit Function
End If
End If
Next
MyMatch = "NO MATCH"
End Function