Я только что заметил, что в Excel Find нет опции "соответствовать только целому слову" (я не говорю о "соответствии всему содержимому ячейки"), например, поиск по "часть" не должен соответствовать "партнер". В MS Word такая опция есть (проверьте скриншот из MS Word).
Есть ли решение этой проблемы в Excel?
решение1
Как указал Скотт, мой первоначальный ответ был неверным.
Из-за множества способов определения границы слова это будет трудно сделать с помощью формулы. Думаю, именно поэтому \b
(граница слова) существует в регулярных выражениях. Если бы только мы могли использовать их в диалоговом окне поиска/замены Excel.
Установите эту надстройку Excel,http://www.codedawn.com/excel-add-ins.phpнажмите на новыйНайти и заменить RegExкнопку (или опцию меню в 2003 году) и используйте этот поисковый запрос \bword\b
, снимите/отметьте флажок «Учитывать регистр» и нажмите «Найти».
Важно, чтобы буквы b были строчными, и вам придется немного узнать о регулярных выражениях (рекомендуетсяэтот сайт), если вы хотите найти что-то, связанное с пунктуацией, но вы можете поместить между \b
тегами любую стандартную букву/цифру, если это все, что вы хотите найти.
Думаю, я охватил большинство случаев с помощью этого теста:
решение2
С помощью этой формулы вы можете выполнить поиск по слову «Word» (без учета регистра), чтобы получить значение TRUE только для точного слова, при условии отсутствия знаков препинания.
=ISNUMBER(SEARCH(" Word "," "&A1&" "))
Это вернет TRUE для текста типа
Умный с полуслова понимает илиСмазка - это слово
и правильно ЛОЖЬ дляДамоклов меч.....но вы также получите ЛОЖЬ для чего-то вроде
Мое слово!потому что восклицательный знак отрицает совпадение
Чтобы справиться с пунктуацией, вы можете использовать несколько функций SUBSTITUTE, например, чтобы игнорировать запятую, точку с запятой и восклицательный знак, вы можете использовать эту версию
=ISNUMBER(SEARCH(" Word "," "&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,",",""),";",""),"!","")&" "))
решение3
При вводе параметров в разделе "Найти" просто вставьте пробел перед словом или после него. В моем случае "Van" не давал "SAVANA" изменяться, а "Man" не позволял "Mankind" изменяться.
решение4
Я нашел решение этой проблемы.
Вам необходимо создать функцию, которую вы будете вызывать после того, как выполните стандартный поиск и найдете 1 результат.
Функция будет проверять, является ли слово целым или нотой. Вот код функции:
Он проверяет символ до и после найденного выражения, и если это НЕ буква (с ударением или без), возвращает значение true, в противном случае — false.
Function WholeWord(ByVal text As String, ByVal expression As String) As Boolean
Dim aux1 As Integer: aux1 = 0
Dim aux2 As Integer: aux2 = 0
Dim condition1 As Boolean: condition1 = False
Dim condition2 As Boolean: condition2 = False
aux1 = InStr(1, text, expression, vbTextCompare)
If aux1 = 1 Then
condition1 = True
Else
If UCase(Mid(text, aux1 - 1, 1)) Like "[!A-ZÂÊÎÔÛÁÉÍÓÚÇÃÕÀÈÌÒÙÄËÏÖÜ]" Then
condition1 = True
End If
End If
aux2 = aux1 + Len(expression)
If aux2 = Len(text) + 1 Then
condition2 = True
Else
If UCase(Mid(text, aux2, 1)) Like "[!A-ZÂÊÎÔÛÁÉÍÓÚÇÃÕÀÈÌÒÙÄËÏÖÜ]" Then
condition2 = True
End If
End If
If condition1 = True And condition2 = True Then
WholeWord = True
Else
WholeWord = False
End If
End Function