Страницы: 1
RSS
VBA. Поиск по частичному совпадению
 
Уважаемые форумчане, добрый день!

Столкнулась с такой проблемой: есть файл с большим количеством строк. ВПР виснет и считает все очень долго, поэтому использовала макрос. Но макрос работает только при полном совпадении ячеек. То есть грубо говоря, заменяет формулу "=ВПР(А1;Лист2!А1:В200000;2;0)"
Подскажите, пожалуйста, как преобразовать макрос так, чтобы он заменял формулу "=ВПР("*"&А1&"*";Лист2!А1:В200000;2;0)"?

Заранее большое спасибо!

Вот само тело макроса:
Код
 Sub ВПР()
   
    Dim a, b, c, iLastrow As Long, i As Long, ii As Long

    With Sheets("Лист1")    
        iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
        a = Range(.[a8], .Range("a" & iLastrow)).Value
    End With

    With Sheets("Лист2")  
        iLastrow = .Cells(Rows.Count, 3).End(xlUp).Row
        b = Range(.[C8], .Range("A" & iLastrow)).Value
    End With


    ReDim c(1 To UBound(a), 1 To 30)

    With CreateObject("Scripting.Dictionary")
    

        For i = 1 To UBound(b)
            .Item(b(i, 1)) = i
        Next


        For i = 1 To UBound(a)
            If .exists(a(i, 1)) Then
                c(i, 1) = b(.Item(a(i, 1)), 2)
                               
            End If
        Next
    End With


    With Sheets("Лист1") 
        .[o8].Resize(UBound(c), 3) = c
        .Activate
    End With
End Sub

 
Цитата
Ульяна XXX: как преобразовать макрос
1. не говорите про формулы, когда используете код или получите решение только по ним
2. Ваш макрос работает на словарях, а они не поддерживают маску, необходимую для поиска по частичному совпадению
3. Как реализовать: забрать данные в массив и бегать по нему проверяя каждый элемент вот так If arr(r,c) like "*часть слова*" Then
3.1. Можно без массива искать с помощью метода Range.Find, как в инструменте "Найти" - он поддерживает подстановочные символы маски

Название темы: VBA. Поиск по частичному совпадению
Изменено: Jack Famous - 10.07.2020 16:34:39
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: не говорите про формулы, когда используете код
Ульяна XXX, предложите название темы. Модераторы заменят.
 
А можно такую ВПР и ставить макросом, и затем заменять на значение.
 
Да, скорее всего так и сделаю, если не найду другой вариант. Просто файл тяжелый, не хотела, чтобы он думал по два часа

Всем большое спасибо за советы!)))
 
Цикл в цикле с проверкой на частичное совпадение быстрым не будет в любом случае. Даже если бегать по массивам.
 
Цитата
Ульяна XXX написал: Всем большое спасибо за советы!)))
И модератору? Где новое название темы?
 
vikttur, я в #2 ещё предлагал
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Проморгал, спасибо
Страницы: 1
Наверх