2016-09-13 6 views
0
Public Function SameStuff(s1 As String, s2 As String) As Boolean 
    Dim bad As Boolean 

    SameStuff = False 
    ary1 = Split(Replace(s1, " ", ""), ",") 
    ary2 = Split(Replace(s2, " ", ""), ",") 

    Length1 = UBound (ary1) 
    Length2 = UBound(ary2) 

    k=1 
    If Length1<= Length2 and Length1<>0 then 
     for i=0 to Length1-1 
     If ary1(i) = ary2(i) then 
      ary3(k,i) = ary1(i) 
     End If 
     Next i 
     k=k+1 
    else 
     Exit function 
    End If 
End Function 

Здесь я беру значение из диапазона («A1») - (имеет 3 слова) и значение Range («A2») - (имеет 4 слова). Разделите их, найдя пространство между словами и сохраните их в массивах. Если длина одного массива равна 3, а другое - 4, будут сравниваться 3 слова из обоих массивов. Если найдено 3 слова, то Range («B1») и Range («B2») должны иметь имя 3-го слова i.e Range («A1»). Я думаю, что эта логика будет хорошо работать, чтобы найти похожие имена, такие как «ABC DEF HIJ» в A1 и «ABC DEF HIJ Limited» в A2.Как заменить несколько одинаковых значений на одно значение

Я не могу выразить это кодом.

Длина слова не останется прежней i.e 3,4.

+0

Что вы хотите сделать с результатом, ary3? Вы заменяете меньшую ячейку из трех слов более длинной ячейкой из четырех слов, если совпадают первые три слова? –

ответ

1

Использование словаря было бы простой альтернативой, вы можете использовать метод .exists для этого, вам нужно передать массив (результат split()) в словарь tho, но это цикл, а не слишком сложно. Или вы можете оставить один из них в виде строки и разделить только 1 и использовать if strStringLeftAlone like "* " & strSection(x) & " *" или использовать instr с той же идеей, что и поиск " " & strSection(x) & " " или найти

+0

Сначала прочитайте о них, затем спросите: –

+0

@ Nathan Спасибо за тонну за предложение словаря. Не знал об этом, пока не упомянул. код работает отлично сейчас – Prakash

1

Это должно работать независимо от того, как долго массивы, т.е. нет сколько слов (и пробелов) есть в каждой из строк, которые нужно сравнить. Заметьте, что я удалил переменную k, поскольку она не казалась какой-либо целью в коде. Однако это решение предполагает, что ТОЛЬКО слово LAST в двух строках отличается.

Public Function SameStuff(s1 As String, s2 As String) As Boolean 

    Dim sameBool As Boolean 
    Dim i As Long, Length1 As Long, Length2 As Long 
    Dim tempArr1 as String, tempArr2 as String 
    Dim ary1 as Variant, ary2 as Variant 

    ary1 = Split(Replace(s1, " ", ""), ",") 
    ary2 = Split(Replace(s2, " ", ""), ",") 

    Length1 = UBound (ary1) 
    Length2 = UBound(ary2) 

    If Length1 <= Length2 and Length1 > 0 then 

     For i=0 to Length1-1 
     tempArr1 = tempArr1 & ary1(i) 
     tempArr2 = tempArr2 & ary2(i) 
     Next i 

     If tempArr1 = tempArr2 then sameBool = True 

    End If 

    SameStuff = sameBool 

End Function 

Редактировать

Добавлено несколько объявлений переменных в коде, что я позабыл, иначе код не будет работать с Option Explicit в верхней части модуля.

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