2015-02-20 3 views
0

Я разрабатываю этот макрос в Excel vba, который будет проходить через столбец имен клиентов, отсортированных с a на z, и проверить, какие из них похожи, и назначить им один и тот же идентификатор клиента в столбец рядом с ним. Я использую оператор Like для сравнения имен, но по какой-то причине он не набирает сходства между Именами. Например, я хочу, чтобы он подумал, что Этна и Этна Медикейд - это то же самое, потому что они оба содержат Этна. Я не уверен, был ли этот оператор предназначен для этого, а если нет, что бы это было лучше всего. Я вставил код ниже. Он находится на предварительных этапах, поэтому на данный момент он просто выводит MsgBox вместо назначения идентификатора клиента. Кроме того, диапазон определяется функцией, которая просто устанавливает его как диапазон в один столбец. Любая помощь будет принята с благодарностью!Проверить аналогичные значения VBA Excel

Function SetInternalClientID() 

Sheet9.Activate 

Columns("J:J").Select 
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 

Set rng2 = FindHeader("CLIENT NAME", Sheet9.Name) 

Count = 0 

For i = 73 To rng2.Rows.Count 

ClientCheck = rng2.Cells(i, 1).Value Like rng2.Cells(i - 1, 1).Value 

If ClientCheck = True Then 

MsgBox (rng2.Cells(i, 1) & " Like " & rng2.Cells(i - 1, 1).Value) 

Else 

MsgBox (rng2.Cells(i, 1) & " NOT LIKE " & rng2.Cells(i - 1, 1).Value) 

End If 

Next i 


End Function 
+4

Возможно, вам придется добавить подстановочные знаки. «Aetna *» соответствует «Aetna Medicaid». См. [Подобно оператору (Visual Basic) (MSDN)] (https://msdn.microsoft.com/en-us/library/swf8kaxw.aspx). – Porcupine911

+0

Нечеткий надзор над надстройкой может представлять интерес. – pnuts

ответ

2

Оператор Like часто путает. Он не просто проверяет соответствие двух строк. Вместо этого значение слева от оператора Like является строкой для проверки по шаблону, который находится справа от оператора. String_To_Test Like Pattern

С учетом сказанного, такое выражение, как: "Aetna Medical" Like "Aetna" будет возвращена истина, но "Aetna" Like "Aetna Medical" вернется значение False.

0

Дикобраз является правильным. Вам нужно будет использовать подстановочные знаки? и * в начале, в конце или в середине строки. Я бы также подумал об использовании instr(), чтобы вернуть значение, если две строки содержат похожий текст.

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