1

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

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

示例:
ACBD, AC- Match
ACBD, CA- Match
ACBD, ADB- Match
AC, ABCD- Match
ABC, ABD-No Match

4

4 回答 4

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)了 cell C1,然后将公式拖到接下来的四行):

电子表格的屏幕截图

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

编辑:我刚刚注意到@Philip 对您的问题的评论 - 我似乎已经实施了他的建议,尽管我在开始编写它时没有看到它......但这里仍然是一个小技巧!

于 2013-03-12T17:21:44.087 回答
1

INSTR 将在字符串中查找子字符串:

Typical_String = "ABZYC"

if instr(Typical_String,"ABC") > 0 then
于 2013-03-12T15:28:57.600 回答
1

如果您想要一个公式解决方案,Excel 先生论坛网站上一个名为Schielrn的用户想出了这个崇高的杰作(使用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
于 2013-03-12T17:41:38.883 回答
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
于 2014-10-03T14:43:51.847 回答