在Excel中逐字母比较

时间:2019-01-09 15:41:53

标签: excel vba excel-formula

我需要逐个字母地比较两个单元格中的文本,并返回不匹配字符的数量。 示例:

A - Richard
B - Rickard
Expected in C - 1 ( because only one character is mismatch)

A - 2004DRTYHJ
B - 1004XGTYHJ
Expected in C - 3 ( Three characters are mismatch )

应该逐个字母进行比较。

谢谢。

3 个答案:

答案 0 :(得分:0)

这不是一个很好的解决方案,但是如果假设两个字符串都将始终具有相同的长度,并且只是在位置上放错了字母(即没有像“ Richard”和“ BRichar”那样的转置)。

不带斜线地将两个字符串分开,仅将每个字母分开(数据->文本至列)。

现在我们有类似的东西 clone() R I C H A R D

在它们之下,如果相等,则使用相等运算符将其设置为TRUE,否则将使用FALSE设置。然后在FALSES上做一个COUNTIF。

然后,如果需要大量错位字符,则可以在COUNTIF上进行求和。

同样,这仅在我说的假设是正确的情况下有效。

答案 1 :(得分:0)

我创建了一个解决方案,如果有很大差异,则将其添加到最终计数中。首先是完成工作的功能,然后在底部列出如何调用的示例:

Public Function Differences(strA As String, strB As String)
Dim i As Integer
Dim intMinLen As Integer
Dim intCountDiff As Integer

intCountDiff = 0

If Len(strA) < Len(strB) Then
    intMinLen = Len(strA)
Else
    intMinLen = Len(strB)
End If

For i = 1 To intMinLen
    If Mid(strA, i, 1) <> Mid(strB, i, 1) Then
        intCountDiff = intCountDiff + 1
    End If
Next i
Differences = intCountDiff + Abs(Len(strA) - Len(strB))
End Function

Public Sub test()
    Range("A3").Value = Differences(Range("A1").Value, Range("A2").Value)
    Range("B3").Value = Differences(Range("B1").Value, Range("B2").Value)
End Sub

答案 2 :(得分:0)

这需要成为VBA吗?该公式将根据您提供的样本数据返回预期结果。将其放在单元格C1中并向下复制:

=MAX(LEN(A1),LEN(B1))-SUMPRODUCT(--(MID(A1,ROW(A$1:INDEX(A:A,MIN(LEN(A1),LEN(B1)))),1)=MID(B1,ROW(B$1:INDEX(B:B,MIN(LEN(A1),LEN(B1)))),1)))