如何比较excel中两个单元格是否具有任何顺序的相同字符?

时间:2017-01-23 08:00:41

标签: excel vba excel-vba

我想比较Excel中的两个单元格是否包含相同的字符,这些字符可以是任何顺序,使用基于Excel的公式。

例如,如果:

A1= Japan;US 

A2= US;Japan

- 编辑 -

另一个例子,

    C1= abcefg

    C2= efgabc

在这两种情况下,当我检查A1 = A2或C1 = C2时,它应该给我TRUE,因为两个单元格中的所有字符完全相同,尽管顺序不同。

Ps - 这些单元格可以有任何字符长度。

2 个答案:

答案 0 :(得分:1)

我认为没有一个功能可以解决您的问题。

我制作了一个比较两个单元格的小脚本,对其进行测试,将您的值放在Range("A1")Range("A2")中。因为你只是在比较两个值,所以像这样循环将会产生非常小的性能。

Sub d()
   Dim ValueOne As String
   Dim ValueTwo As String
   Dim charVal
   Dim sString
   Dim char
   Dim boolVal As Boolean


      ValueOne = Cells(1, 1).Value
      ValueTwo = Cells(2, 1).Value

      boolVal = True

      If Len(ValueTwo) = Len(ValueOne) Then
        charVal = StrConv(ValueOne, vbUnicode)
        charVal = Left(charVal, Len(charVal) - 1)
        sString = Split(charVal, Chr(0))
            For Each char In sString
                If Len(ValueTwo) = Len(Replace(ValueTwo, char, "")) Or Len(Replace(ValueTwo, char, "")) <> Len(Replace(ValueOne, char, "")) Then
                   boolVal = False
                   GoTo nxt
                End If
            Next
        charVal = StrConv(ValueTwo, vbUnicode)
        charVal = Left(charVal, Len(charVal) - 1)
        sString = Split(charVal, Chr(0))
            For Each char In sString
                If Len(ValueOne) = Len(Replace(ValueOne, char, "")) Or Len(Replace(ValueTwo, char, "")) <> Len(Replace(ValueOne, char, "")) Then
                   boolVal = False
                   GoTo nxt
                End If
            Next
       Else
            boolVal = False
       End If
nxt:
      If boolVal = False Then
         MsgBox "Strings are different"
      Else
         MsgBox "Strings are the same"
      End If

End Sub

另外,如果你想将它作为一个函数,你可以通过这样做很容易地改为一个,

Function Compare(ValueOne As String, ValueTwo As String)

   Dim charVal
   Dim sString
   Dim char
   Dim boolVal As Boolean      

         ' Insert same code as above here   


          'End Insert same code as above here
      If boolVal = False Then
          Compare = True
      Else
          Compare = True
      End If
End Function

答案 1 :(得分:0)

这个想法如下:我们取两个字符串(在false中)并在Sub Test函数中对它们进行比较。比较的想法是将它们转换为数组(CompareMe),然后对数组进行排序(BubbleSort)。最后,StrToArray的结果就是问题的答案。

(Join(varStr1, "") = Join(varStr2, ""))