2015-07-01 2 views
0

Я просмотрел вопросы и не могу найти ответа.Excel VBA: Как вернуть частичное совпадение

У меня есть список идентификаторов поступления в электронной таблице, созданный системой 1. В другой таблице, я также иметь список те же поступления, созданный системой 2.

90 +% от информации представили то же самое, и я могу запустить Match, используя workheetfunction.match. Однако, существует особый тип получения (возврата и покупки), который имеет другой формат в системе 2.

Примером может быть:

Система 1:

  • AAAA0000001
  • AAAA0000002
  • AAAA0000003
  • AAAA0000004
  • ....
  • ZZZZ9999999

System 2:

  • AAAA0000001
  • AAAA0000002
  • AAAA0000003/AAAA000004 - это будет возврат и купить
  • AAAA0000005
  • ....
  • ZZZZ9999999

кода я использую:

While MC > MD 

    Worksheets("ID sheet").Activate        ' activate ID sheet 

    MF = WorksheetFunction.VLookup(MD, Range("U2:W" & Range("U1")), 2, False) ' Vlookup for System 1 letters 
    MG = WorksheetFunction.VLookup(MD, Range("U2:W" & Range("U1")), 3, False) ' Vlookup for System 1 numbers 
    MH = MF & MG            ' combine GFAS and Fund IDs 

    Worksheets("System 1").Activate    ' Activate System 1 screen 
     MI = WorksheetFunction.Match(MH, Range("HC:HC"), 0)   ' Match combined letters and numbers for System 1 
     MK = Range("A" & MI)          ' Find deal ID 

     Worksheets("System 2").Activate       ' Activate System 2 screen 
     ML = WorksheetFunction.Match(MK, Range("W:W"), 0)   ' Match deal ID in Range W 
     MM = Range("F" & ML)          ' Find Register ID 

     MD = MD + 1 

    Wend 

код возвращает ошибку во время выполнения 1004.

Есть ли способ, что я могу получить код, чтобы принять двойную запись как матч и вернуть ответ?

Любая помощь с благодарностью оценена.

+0

Относящиеся к ошибке: скорее всего, это вызвано тем, что функция .Match возвращает ошибку, если он не находит ничего, поэтому вам придется проверить это: 'If Not IsError (MI) Then'. Другой способ получить частичное совпадение - использовать функцию .Find() –

+0

@paulbica. Я пробовал этот метод, но, похоже, проблема связана с тем, что блок кода находится в цикле WHILE. Теперь я получаю сообщение об ошибке, в котором говорится, что у меня есть WEND без WHILE. – Clauric

+0

Обновите код, указанный в вопросе, чтобы включить полный контекст (где находится строка While). Легче выявлять проблемы, если вы включаете полную функцию. –

ответ

2

Если я понял, что вы соответствие к тому, что вы можете использовать:

MI = WorksheetFunction.Match("*" & MH & "*", Range("HC:HC"), 0) 
+0

Этот метод работает (бит), но теперь он возвращает первую строку, которая является заголовком столбца. – Clauric

+0

Это должно произойти только в том случае, если заголовок содержит ваши данные поиска. – Rory

Смежные вопросы