我有一堆字符串,包括字符“A”,“B”......“Z”(没有其他字符串)。典型的字符串看起来像ABZYC
。这些字符串是成对出现的,如ABC
,ABDC
。如果一个字符串包含在另一个字符串中(即两个字符串中的任何一个包含另一个字符串中的所有字母表),则字符串是可比较的。字符串出现的顺序无关紧要。
excel vba中是否有直接功能进行这种比较?
示例:
ACBD
,AC
- Match
ACBD
,CA
- Match
ACBD
,ADB
- Match
AC
,ABCD
- Match
ABC
,ABD
- No Match
答案 0 :(得分:5)
在工作簿的模块中添加以下功能:
Function allIn(str1, str2)
' check whether all elements of str1 occur in str2
' and vice versa
Dim l1, l2, ii As Integer
Dim isfound As Boolean
isfound = True
l1 = Len(str1)
l2 = Len(str2)
If l1 < l2 Then
' look for all the elements of str1 in str2
For ii = 1 To l1
If InStr(1, str2, Mid(str1, ii, 1), vbTextCompare) <= 0 Then
isfound = False
Exit For
End If
Next ii
Else
' look for all the elements of str2 in str1
For ii = 1 To l2
If InStr(1, str1, Mid(str2, ii, 1), vbTextCompare) <= 0 Then
isfound = False
Exit For
End If
Next ii
End If
allIn = isfound
End Function
现在,您可以使用result = inStr("ABD", "BAD")
或从电子表格本身在代码中的其他位置调用此方法。在电子表格中,您可以输入=allIn(A3, B6)
来比较单元格A3
和B6
中的字符串。
当我这样做时会发生什么(我在单元格=allIn(A1, B1)
中输入C1
,然后将公式拖到接下来的四行):
我相信这可以解决你的问题。
编辑:我刚刚注意到@ Philip对你的问题的评论 - 我似乎已经实施了他的建议,虽然当我开始编写它时我还没有看到它......但这里有一个小小的提示!答案 1 :(得分:1)
INSTR将在字符串中找到子字符串:
Typical_String = "ABZYC"
if instr(Typical_String,"ABC") > 0 then
答案 2 :(得分:1)
如果您需要公式解决方案, Mr Excel 论坛网站上名为 Schielrn 的用户会提出this sublime masterpiece(使用 ARRAY FORMULAS < /强>)
或者,如果你想要一个VBA,试试这个......
Sub compare()
Dim iIndx As Integer
Dim str1 As String
Dim str2 As String
Dim sLetter As String
Dim bFound As Boolean
Range("A1").Select
bFound = False
Do
str1 = VBA.Trim(ActiveCell.Text)
str2 = VBA.Trim(ActiveCell.Offset(0, 1).Text)
For iIndx = 1 To Len(str1)
If VBA.InStr(str2, VBA.Mid(str1, iIndx, 1)) <> "" Then
' found it
bFound = True
Else
bFound = False
exit for
End If
Next
If bFound = False Then
' check the other way!
For iIndx = 1 To Len(str2)
If VBA.InStr(str1, VBA.Mid(str2, iIndx, 1)) <> "" Then
' found it
bFound = True
Else
bFound = False
exit for
End If
Next
End If
If bFound = True Then ActiveCell.Offset(0, 2).Value = "MATCHED!"
ActiveCell.Offset(1, 0).Select
Loop While Not ActiveCell.Offset(1, 0).Text = ""
End Sub
答案 3 :(得分:0)
我想念这篇文章!
使用函数EXACT
比较两个文本字符串,如果它们恰好是,则返回TRUE 同样,否则为FALSE。 EXACT区分大小写但忽略格式 差异。
我通常添加UPPER函数,即:
A1 = Some Place
B1 = some place
与
=EXACT(UPPER(A1),UPPER(B1)) = EXACT(SOME PLACE, SOME PLACE) = TRUE
没有UPPER
=EXACT(A1,B1) = EXACT(Some Place, some place) = FALSE