Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск совпадения части текста - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск совпадения части текста
Поиск совпадения части текста
pechkin Дата: Воскресенье, 26.04.2015, 10:15 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 49 ±
Замечаний: 0% ±

2003
Здравствуёйте! Опять требуется помощь... Подобные задачи уже, наверняка,были,но притулить то, что было найдено для своей цели не получается. Нужно, чтобы данные извлекались из базы по совпадению части или целой строки, содержащей выбранный текст (В файле понятней) Спасибо!
К сообщению приложен файл: 10407334.xls (56.5 Kb)
 
Ответить
СообщениеЗдравствуёйте! Опять требуется помощь... Подобные задачи уже, наверняка,были,но притулить то, что было найдено для своей цели не получается. Нужно, чтобы данные извлекались из базы по совпадению части или целой строки, содержащей выбранный текст (В файле понятней) Спасибо!

Автор - pechkin
Дата добавления - 26.04.2015 в 10:15
Wasilich Дата: Воскресенье, 26.04.2015, 10:41 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Поковыряйся во 2-м и 3-м вариантах.
К сообщению приложен файл: __UserForm___.rar (68.4 Kb)


Сообщение отредактировал Wasilic - Воскресенье, 26.04.2015, 10:42
 
Ответить
СообщениеПоковыряйся во 2-м и 3-м вариантах.

Автор - Wasilich
Дата добавления - 26.04.2015 в 10:41
Skif-F Дата: Воскресенье, 26.04.2015, 12:46 | Сообщение № 3
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
pechkin, для начала определитесь с правилами обработки. Это сэкономит Вам много сил впоследствии.
Например, уже есть одно правило - тип счётчика должен выбираться не по конкретной модели, а по общему типу или фирме-производителю. Определитесь какие ещё могут быть требования и варианты по другим полям, поскольку набор правил может здорово повлиять на окончательный способ анализа.
 
Ответить
Сообщениеpechkin, для начала определитесь с правилами обработки. Это сэкономит Вам много сил впоследствии.
Например, уже есть одно правило - тип счётчика должен выбираться не по конкретной модели, а по общему типу или фирме-производителю. Определитесь какие ещё могут быть требования и варианты по другим полям, поскольку набор правил может здорово повлиять на окончательный способ анализа.

Автор - Skif-F
Дата добавления - 26.04.2015 в 12:46
Skif-F Дата: Воскресенье, 26.04.2015, 23:51 | Сообщение № 4
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Могу предложить такую функцию:
[vba]
Код
'Анализ двух строк на подобие
'Вход:
'   String1, String2 - сравниваемые строки
'Результат:
'   число от 0 до 1, определяющее степень схожести двух строк
Public Function Simil2(ByVal String1 As String, ByVal String2 As String) As Double
       Dim l1 As Integer, l2 As Integer    'Количества слов в каждой строке
       Dim n As Integer    'Счётчик цикла
       Dim st1 As Variant  'Массив слов строки String1
          
       String1 = UCase(String1): String2 = UCase(String2)      'Приводим строки к одному виду
       If String1 = String2 Then
           Simil2 = 1
       Else
           st1 = Split(String1, " ")           'Разбиваем String1 на слова
           l1 = UBound(st1)                    'Получаем количество слов в строке String1
           l2 = UBound(Split(String2, " "))    'Получаем количество слов в строке String2
           String2 = " " + String2 + " "
           If l1 > 0 And l2 > 0 Then           'Должно быть хотя бы по одному слову в каждой строке
               For n = 0 To l1                     'Перебираем все слова в строке String1
                   If InStr(1, String2, st1(n), vbTextCompare) > 0 Then    'Проверяем их наличие в строке String2
                       Simil2 = Simil2 + 1         'Считаем количество найденных слов
                   End If
               Next n
               Simil2 = Simil2 / (l1 + l2)         'Считаем коэффициент
           Else
               Simil2 = 0
           End If
       End If
End Function
[/vba]
Для лучшей точности определения совпадения строк лучше выполнять вызов дважды, меняя местами операнды:
[vba]
Код
    d1 = Simil2(Строка1, Строка2) + _
            Simil2(Строка2, Строка1)
       If d1 > 0.45 Then
[/vba]
где 0,45 - пороговое значение - подбирается экспериментально
К сообщению приложен файл: Simil.xls (62.5 Kb)


Сообщение отредактировал Skif-F - Понедельник, 27.04.2015, 00:22
 
Ответить
СообщениеМогу предложить такую функцию:
[vba]
Код
'Анализ двух строк на подобие
'Вход:
'   String1, String2 - сравниваемые строки
'Результат:
'   число от 0 до 1, определяющее степень схожести двух строк
Public Function Simil2(ByVal String1 As String, ByVal String2 As String) As Double
       Dim l1 As Integer, l2 As Integer    'Количества слов в каждой строке
       Dim n As Integer    'Счётчик цикла
       Dim st1 As Variant  'Массив слов строки String1
          
       String1 = UCase(String1): String2 = UCase(String2)      'Приводим строки к одному виду
       If String1 = String2 Then
           Simil2 = 1
       Else
           st1 = Split(String1, " ")           'Разбиваем String1 на слова
           l1 = UBound(st1)                    'Получаем количество слов в строке String1
           l2 = UBound(Split(String2, " "))    'Получаем количество слов в строке String2
           String2 = " " + String2 + " "
           If l1 > 0 And l2 > 0 Then           'Должно быть хотя бы по одному слову в каждой строке
               For n = 0 To l1                     'Перебираем все слова в строке String1
                   If InStr(1, String2, st1(n), vbTextCompare) > 0 Then    'Проверяем их наличие в строке String2
                       Simil2 = Simil2 + 1         'Считаем количество найденных слов
                   End If
               Next n
               Simil2 = Simil2 / (l1 + l2)         'Считаем коэффициент
           Else
               Simil2 = 0
           End If
       End If
End Function
[/vba]
Для лучшей точности определения совпадения строк лучше выполнять вызов дважды, меняя местами операнды:
[vba]
Код
    d1 = Simil2(Строка1, Строка2) + _
            Simil2(Строка2, Строка1)
       If d1 > 0.45 Then
[/vba]
где 0,45 - пороговое значение - подбирается экспериментально

Автор - Skif-F
Дата добавления - 26.04.2015 в 23:51
excelhelprus Дата: Понедельник, 27.04.2015, 10:51 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 5 ±
Замечаний: 20% ±

2015
[offtop]Skif-F, Отличное решение, сохраню себе[/offtop]


Сообщение отредактировал excelhelprus - Понедельник, 27.04.2015, 10:51
 
Ответить
Сообщение[offtop]Skif-F, Отличное решение, сохраню себе[/offtop]

Автор - excelhelprus
Дата добавления - 27.04.2015 в 10:51
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск совпадения части текста
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!