2017-04-11 25 views
3

我创建了一个评估,申请人填写Excel。我有一把钥匙,我在那里复制他们的答案,并告诉我他们的答案是否与我的钥匙匹配。 我想添加一个公式,该公式还会显示申请人的单元格(B2)和密钥单元格(A2)之间的差异,以便更容易地查看他们出错的地方。如何判断Excel中两个字符串的区别?

我试过使用=SUBSTITUTE(B2,A2,"")但这只会给我在字符串的开头或结尾的差异。通常,差异在中间。

例如,我的密钥(单元格A2)可能会说:Cold War |猪湾|菲德尔卡斯特罗

而申请人(单元格B2)可能会说:冷战|古巴导弹危机|菲德尔·卡斯特罗

我想这个公式返回:“古巴导弹危机”

+0

替代品将无处不在,不仅开始或结束。你的单元格A2包含所有三个字符串?或提到的任何字符串? –

+0

'A2'是否有冷战|猪湾|菲德尔·卡斯特罗“在牢房里?或者那些分别在'A2','B2','C2'中?如果您可以使用“文本到列”并使用'|'作为分隔符,则可能会更远一些。这会将您的数据分成三列,您可以更轻松地检查彼此。另外,我认为顺序并不重要? – BruceWayne

+0

对不起,是的,“冷战|猪湾|菲德尔卡斯特罗”是单元格中的字符串。同“冷战|古巴导弹危机|菲德尔卡斯特罗” – DukeSilver

回答

6

你可以试试这样的事情...

Function CompareStrings(keyRng As Range, ansRng As Range) As String 
Dim arr() As String 
Dim i As Long 
arr() = Split(ansRng.Value, "|") 
For i = 0 To UBound(arr) 
    If InStr(keyRng.Value, arr(i)) = 0 Then 
     CompareStrings = arr(i) 
     Exit Function 
    End If 
Next i 
End Function 

然后你可以使用这个UDF像下面...

=CompareStrings(A2,B2) 

如果你想将它们以相反的顺序也比较,并从其中任何回报不匹配的字符串的一部分,试试这个...

Function CompareStrings(ByVal keyRng As Range, ByVal ansRng As Range) As String 
Dim arr() As String 
Dim i As Long 
Dim found As Boolean 
arr() = Split(ansRng.Value, "|") 
For i = 0 To UBound(arr) 
    If InStr(keyRng.Value, Trim(arr(i))) = 0 Then 
     found = True 
     CompareStrings = arr(i) 
     Exit Function 
    End If 
Next i 

If Not found Then 
    arr() = Split(keyRng.Value, "|") 
    For i = 0 To UBound(arr) 
     If InStr(ansRng.Value, Trim(arr(i))) = 0 Then 
      CompareStrings = arr(i) 
      Exit Function 
     End If 
    Next i 
End If 
End Function 

使用此像以前一样下面...

=CompareStrings(A2,B2) 

所以功能将首先B2的所有字符串部分比较A2,如果发现任何不匹配,它将返回字符串的一部分和如果它没有发现任何不匹配,它将比较A2中字符串的所有部分与B2,并返回字符串的任何不匹配部分。所以它会比较两种方式。

enter image description here

+0

这是做这项工作。谢谢!我现在意识到一些答案正在返回空字符串,其中一个单元格比另一个单元格少。例如,如果密钥(A2)包含“冷战|猪湾|菲德尔卡斯特罗”但他们回答了(B2)“冷战|猪湾”,则“= CompareStrings(A2,B2)'返回”“ 。我试着倒转它,所以它变成了'= CompareStrings(B2,A2)',但它只是返回“猪群湾”。 在这种情况下是否会有方法使'= CompareStrings(A2,B2)'返回“Fidel Castro”? – DukeSilver

+0

不客气。编辑解决方案并添加另一个UDF,它们将两种方式进行比较。 – sktneer

+0

太棒了。非常感谢你! – DukeSilver

相关问题