2016-06-23 1 views
0

У меня есть ряд повествовательных описаний, мне нужно, чтобы автоматически классифицировать в Excel:VBA: Несколько ключевых слов ВПР

Description      Category 
I updated the o.s. 
I installed the o.s.  
I cleaned valve a 
I cleaned valve b 
I installed valve a 
Today the o.s. was updated 

У меня есть еще один лист с ключевыми словами и категория ключевые слова, связанные с:

Keyword 1 Keyword 2 Keyword 3 Category 
cleaned  valve   a   A 
installed valve   a   B 
updated  os      C 
installed  os      D 

Мой код до сих пор можно найти только одно ключевое слово в то время, и, следовательно, будет сообщать неверные ответы, потому что некоторые ключевые слова используются в нескольких повествований:

Public Function Test21(nar As Range, ky As Range) As String 

Dim sTmp As String, vWrd As Variant, vWrds As Variant 

'Splits Fsr Narrative into individual words so it can be searched for keywords' 
vWrds = Split(nar) 

For Each vWrd In vWrds 

    If Not IsError(Application.VLookup(vWrd, ky, 3, False)) Then 
    sTmp = Application.VLookup(vWrd, ky, 3, False) 
    Exit For 
    End If 
Next vWrd 

Test21 = sTmp 

End Function  

Я видел такие алгоритмы, как this, но я чувствую, что моя цель может быть проще осуществить, поскольку все повествования относительно просты.

Спасибо за чтение!

+0

'vWrds = Split (NAR)' вам нужен разделитель для 'split'. – findwindow

+0

, в частности, на основе вашего примера вам нужно разграничить 'nar' на' (пробел) '...' vWrds = Split (nar, "") ' –

ответ

0

Это то, что я искал:

Public Function Test22(nar As Range, key As Range, cat As Range) As String 

For r = 1 To key.Height 
If InStr(nar, key(r, 1)) And InStr(nar, key(r, 2)) Then 
Test22 = cat(r) 
Exit For 
End If 
Next r 

End Function 
0

Вы можете сопоставить несколько столбцов с VLOOKUP, создав столбец соответствия, который объединяет несколько значений вместе, а затем ищет этот столбец для соответствия.

Так что, если вы используете эту формулу в столбце A:

=B1 & "|" & C1 & "|" & D1 

Вы можете затем ВПР против этой колонки матча:

=VLOOKUP("blah|bleh|ugh", 'Sheet2!A1:E100', 5, FALSE) 

Какой будет соответствовать одной строке, которая имеет «бла» в колонке B, «bleh» в столбце C и «тьфу» в столбце D и вернуть значение в столбце E.

Для ваших данных, однако, я думаю, вы также можете захотеть сделать шаг для очистки ввода до пытаясь чтобы соответствовать набору ключевых слов. Метод, описанный выше, лучше всего работает, если ключевые слова находятся в определенном порядке, и где у вас не будет каких-либо не-ключевых слов, загромождающих вещи. (Он также отлично работает для vlookup, где вы хотите совместить несколько фрагментов данных, например, имя, отчество и фамилию в разных столбцах)

В противном случае вам может понадобиться невероятно огромное количество строк в вашем таблицу категорий, чтобы охватить все возможные комбинации и перестановку ваших ключевых слов и других случайных слов, к которым они могли бы присоединиться.

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