Тут недавно обсуждалась замечательная задача, вот ссылка: http://www.excelworld.ru/forum/2-17322-1 У меня фактически идентичная проблема, но с текстом. Плюс еще бы хотелось чтобы совпадение было не точное, а искался текст в тексте. Например в одном столбце Västerbottens Läns Landsting VLL, а в другом Västerbottens VLL. Надо чтобы правые символы во втором столбце отбрасывались бы, пока не останется только Västerbottens, тогда возвращается определенный показатель . Может кто-нибудь помочь?
Добрый день
Тут недавно обсуждалась замечательная задача, вот ссылка: http://www.excelworld.ru/forum/2-17322-1 У меня фактически идентичная проблема, но с текстом. Плюс еще бы хотелось чтобы совпадение было не точное, а искался текст в тексте. Например в одном столбце Västerbottens Läns Landsting VLL, а в другом Västerbottens VLL. Надо чтобы правые символы во втором столбце отбрасывались бы, пока не останется только Västerbottens, тогда возвращается определенный показатель . Может кто-нибудь помочь?Tunka-s
Нет. К сожалению не совсем то. Все компании из одной отрасли, поэтому первое слово зачастую одинаковое - больница или аптека, потом начинаются отличия. По большому счету мне надо реализовать функцию поиск (search) с областью данных. Я так понимаю. ТОлько у меня не получается поиск для массива. Наверное это не возможно.
Нет. К сожалению не совсем то. Все компании из одной отрасли, поэтому первое слово зачастую одинаковое - больница или аптека, потом начинаются отличия. По большому счету мне надо реализовать функцию поиск (search) с областью данных. Я так понимаю. ТОлько у меня не получается поиск для массива. Наверное это не возможно.Tunka-s
Ну тогда так: С использованием пользовательской функции по Вашим критериям
[vba]
Код
Function f(text_to_find$, ByVal диапазон_поиска As Range, Optional ByVal мин_длина&) Dim m(), i&, ii&, t&, s$ If мин_длина = 0 Then мин_длина = Int(Len(text_to_find) / 2)
m = диапазон_поиска.Value 'проверка по массиву от макс. длины до мин длины t = Len(text_to_find) Do While t > мин_длина s = Left(text_to_find, t) For i = 1 To UBound(m): For ii = 1 To UBound(m, 2) If InStr(1, m(i, ii), s) > 0 Then f = m(i, ii): Exit Function Next ii, i t = t - 1 Loop f = vbNullString End Function
[/vba]
Принцип такой: сначала ищем в списке нужное слово - слово ищется от полной длины до мин. допустимой - 3-й параметр. По умолчанию он исчисляется длина слова/2 потом ВПРим по нему Можно добавить и "Trim", чтобы удалять двойные пробелы
Ну тогда так: С использованием пользовательской функции по Вашим критериям
[vba]
Код
Function f(text_to_find$, ByVal диапазон_поиска As Range, Optional ByVal мин_длина&) Dim m(), i&, ii&, t&, s$ If мин_длина = 0 Then мин_длина = Int(Len(text_to_find) / 2)
m = диапазон_поиска.Value 'проверка по массиву от макс. длины до мин длины t = Len(text_to_find) Do While t > мин_длина s = Left(text_to_find, t) For i = 1 To UBound(m): For ii = 1 To UBound(m, 2) If InStr(1, m(i, ii), s) > 0 Then f = m(i, ii): Exit Function Next ii, i t = t - 1 Loop f = vbNullString End Function
[/vba]
Принцип такой: сначала ищем в списке нужное слово - слово ищется от полной длины до мин. допустимой - 3-й параметр. По умолчанию он исчисляется длина слова/2 потом ВПРим по нему Можно добавить и "Trim", чтобы удалять двойные пробелыSLAVICK
Так и не поняла, как вставить вашу функцию к себе в файл, поэтому вставила свои данные в файл с вашей функцией. Не могу сказать, что результат именно такой, как ожидался, но видимо моя задача не решается вообще, слишком ного условий. Главное, что из 3,5 тысяч записей уже 500 совпадают благодаря вашей помощи! Спасибо!
Так и не поняла, как вставить вашу функцию к себе в файл, поэтому вставила свои данные в файл с вашей функцией. Не могу сказать, что результат именно такой, как ожидался, но видимо моя задача не решается вообще, слишком ного условий. Главное, что из 3,5 тысяч записей уже 500 совпадают благодаря вашей помощи! Спасибо!Tunka-s
. Не могу сказать, что результат именно такой, как ожидался,
А чего Вы ожидали от примера в 5-ть строк далекого от нужных данных Хотите больше - давайте больше реальных данных в примере. Можно удалять "двойные пробелы", запятые и др. спецсимволы - тогда совпадений будет гораздо больше А вообще можете посмотреть: Здесь Здесь или спросите у гугла: нечеткое соответствие excel - сразу найдете ответы на многие свои вопросы
. Не могу сказать, что результат именно такой, как ожидался,
А чего Вы ожидали от примера в 5-ть строк далекого от нужных данных Хотите больше - давайте больше реальных данных в примере. Можно удалять "двойные пробелы", запятые и др. спецсимволы - тогда совпадений будет гораздо больше А вообще можете посмотреть: Здесь Здесь или спросите у гугла: нечеткое соответствие excel - сразу найдете ответы на многие свои вопросы SLAVICK
А чего Вы ожидали от примера в 5-ть строк далекого от нужных данных
Да я не в притензии. Я правда очень благодарна и понимаю, что решение напрямую следует из постановки задачи. Я не знала, что это называется нечеткий поиск! Теперь буду смотреть в Гугл совсем другими глазами!
Спасибо! Посмотрю.
Цитата
А чего Вы ожидали от примера в 5-ть строк далекого от нужных данных
Да я не в притензии. Я правда очень благодарна и понимаю, что решение напрямую следует из постановки задачи. Я не знала, что это называется нечеткий поиск! Теперь буду смотреть в Гугл совсем другими глазами! Tunka-s