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
这里我从Range(“A1”)中获取值 - (有3个单词)和Range(“A2”)的值 - (有4个单词)。通过在单词之间查找空格并将它们存储在数组中来拆分它们。如果一个数组的长度为3而另一个数组为4,则将比较两个数组中的3个字。如果发现3个单词相同,则Range(“B1”)和Range(“B2”)必须都具有3个单词名称,即Range(“A1”)。Value。我认为这个逻辑可以很好地找到类似的名字,如A1中的“ABC DEF HIJ”和A2中的“ABC DEF HIJ Limited”。
我无法将其放入代码中。
字长不会保持不变,即3,4。
答案 0 :(得分:1)
使用字典是一个简单的替代方法,您可以使用.exists方法为您执行此操作,您必须将数组(split()的结果)传输到字典中,但这是一个循环,不是太多棘手。或者,您可以将其中一个inputas保留为字符串并仅拆分1,并使用if strStringLeftAlone like "* " & strSection(x) & " *"
或使用instr,其想法与搜索" " & strSection(x) & " "
相同或查找
答案 1 :(得分:1)
无论数组有多长,这都应该有效,即无论要比较的每个字符串中有多少个单词(和空格)。请注意,我删除了k
变量,因为它似乎没有在代码中用于任何目的。然而,该解决方案确实预先假定两个字符串中的最后一个字是不同的。
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
一起使用。