我想比较Excel中的两个单元格是否包含相同的字符,这些字符可以是任何顺序,使用基于Excel的公式。
例如,如果:
A1= Japan;US
A2= US;Japan
- 编辑 -
另一个例子,
C1= abcefg
C2= efgabc
在这两种情况下,当我检查A1 = A2或C1 = C2时,它应该给我TRUE,因为两个单元格中的所有字符完全相同,尽管顺序不同。
Ps - 这些单元格可以有任何字符长度。
答案 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, ""))