比较excel vba中的字符串

时间:2013-03-12 15:25:46

标签: string excel excel-vba vba

我有一堆字符串,包括字符“A”,“B”......“Z”(没有其他字符串)。典型的字符串看起来像ABZYC。这些字符串是成对出现的,如ABCABDC。如果一个字符串包含在另一个字符串中(即两个字符串中的任何一个包含另一个字符串中的所有字母表),则字符串是可比较的。字符串出现的顺序无关紧要。

excel vba中是否有直接功能进行这种比较?

示例:
ACBDAC - Match
ACBDCA - Match
ACBDADB - Match
ACABCD - Match
ABCABD - No Match

4 个答案:

答案 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)来比较单元格A3B6中的字符串。

当我这样做时会发生什么(我在单元格=allIn(A1, B1)中输入C1,然后将公式拖到接下来的四行):

screen shot of spreadsheet

我相信这可以解决你的问题。

编辑:我刚刚注意到@ 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