如何在Excel中使用公式或VBA宏比较两个字符串?
实现无序单词字符串的相等比较
一、Excel公式实现
如果你的Excel是Office 365及以后版本(支持TEXTSPLIT、SORT、TEXTJOIN函数),可以用以下公式直接完成比较:
假设待比较的两个字符串分别在A1和B1单元格,公式如下:
=TEXTJOIN(" ",TRUE,SORT(TEXTSPLIT(A1," ")))=TEXTJOIN(" ",TRUE,SORT(TEXTSPLIT(B1," ")))
公式逻辑:
TEXTSPLIT(A1," "):将字符串按空格拆分为单个单词的数组SORT(...):对拆分后的单词数组按字母顺序排序TEXTJOIN(" ",TRUE,...):把排序后的数组重新拼接成有序字符串- 最后比较两个有序字符串是否相等,相等则返回
TRUE
若使用旧版Excel(无上述函数),可使用数组公式实现:
=SUMPRODUCT(--(COUNTIF(TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",99)),ROW(INDIRECT("1:"&LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1))*99-98,99)),TRIM(MID(SUBSTITUTE(B1," ",REPT(" ",99)),ROW(INDIRECT("1:"&LEN(B1)-LEN(SUBSTITUTE(B1," ",""))+1))*99-98,99)))=1))=LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1
该公式通过拆分单词并统计匹配次数,确保两个字符串的单词完全一致且数量相同。
二、VBA宏实现
你可以编写自定义函数来完成比较,步骤如下:
- 打开Excel,按
Alt+F11进入VBA编辑器 - 右键点击当前工作簿,选择「插入」→「模块」
- 粘贴以下代码:
Function CompareUnorderedStrings(str1 As String, str2 As String) As Boolean Dim arr1 As Variant, arr2 As Variant Dim i As Integer ' 按空格拆分字符串为单词数组 arr1 = Split(str1, " ") arr2 = Split(str2, " ") ' 单词数量不同直接返回False If UBound(arr1) <> UBound(arr2) Then CompareUnorderedStrings = False Exit Function End If ' 对两个数组排序 SortArray arr1 SortArray arr2 ' 逐一对比排序后的单词 For i = LBound(arr1) To UBound(arr1) If arr1(i) <> arr2(i) Then CompareUnorderedStrings = False Exit Function End If Next i CompareUnorderedStrings = True End Function ' 辅助排序子过程 Sub SortArray(arr As Variant) Dim i As Integer, j As Integer Dim temp As String ' 冒泡排序数组元素 For i = LBound(arr) To UBound(arr) - 1 For j = i + 1 To UBound(arr) If arr(i) > arr(j) Then temp = arr(i) arr(i) = arr(j) arr(j) = temp End If Next j Next i End Sub
- 返回工作表,在单元格中输入
=CompareUnorderedStrings(A1,B1)即可得到比较结果
内容的提问来源于stack exchange,提问作者Ashok Beeram
相关产品推荐
相关产品推荐

