Я использую функцию соответствия в своей программе, ее основная цель - сравнить вход, введенный пользователем, а затем зациклиться на базе данных и сделать что-то каждый раз, когда есть совпадение.Excel VBA - повышение точности функции совпадения
В настоящее время я работаю с этим:
Function Match(searchStr As Variant, matchStr As Variant) As Boolean
Match = False
If (IsNull(searchStr) Or IsNull(matchStr)) Then Exit Function
If (matchStr = "") Or (searchStr = "") Then Exit Function
Dim f As Variant
f = InStr(1, CStr(searchStr), CStr(matchStr), vbTextCompare)
If IsNull(f) Then Exit Function
Match = f > 0
End Function
А потом, когда он используется:
If Match(sCurrent.Range("A" & i).Value, cell.Value) Then
Вот моя проблема:
Это слишком неточный. Если у меня в моей базе данных «Foxtrot Hotel», эта функция найдет соответствие всякий раз, когда пользователь набирает «F» «Fo» «Fox» «ox» «xtro» «t hot» и т. Д., Поэтому всякий раз, когда есть строка характера, включенного в полное предложение.
Я хочу, чтобы моя функция соответствия идентифицировала только полные слова. Поэтому в этом случае, чтобы показать матч только для трех конкретных случаев: «Фокстрот» «Отель» и «Фокстрот Отель».
Я прочитал об атрибуте под названием «lookat», который может делать подобные вещи с помощью функции «Найти» (lookat: = xlwhole), знаете ли вы, может ли что-то подобное быть вставлено в мою функцию Match?
Спасибо!
Содержит ли 'Cell.value' вашу базу данных? И в какой форме - слова, разделенные запятой и т. Д.? – brettdj
С одной стороны, у вас есть только одно слово (в диапазоне («A» и i)), с другой стороны, в Cell.Value у вас есть слова или последовательность слов, в основном разделенных пробелами (может быть «Foxtrot») , «Отель Фокстрот» или «Центр капитального строительства» и т. Д.). Я собираюсь попробовать то, что вы предложили в качестве ответа, спасибо @brettdj! – Phalanx