2017-04-11 1 views
3

Ich erstellte eine Bewertung, die Bewerber in Excel ausfüllen. Ich habe einen Schlüssel, in den ich ihre Antworten hineinkopiere, und er sagt mir, ob ihre Antworten meinem Schlüssel entsprechen. Ich möchte eine Formel hinzufügen, die mir auch die Unterschiede zwischen der Zelle des Bewerbers (B2) und der Zelle des Schlüssels (A2) zeigt, um zu sehen, was sie falsch verstanden haben.Wie kann ich die Unterschiede zwischen zwei Zeichenfolgen in Excel erkennen?

Ich versuchte mit =SUBSTITUTE(B2,A2,""), aber das gibt mir nur Unterschiede am Anfang oder Ende der Zeichenfolge. Normalerweise ist der Unterschied in der Mitte.

Zum Beispiel könnte mein Schlüssel (Zelle A2) sagen: Kalter Krieg | Schweinebucht | Fidel Castro

Und der Antragsteller (Zelle B2) könnte sagen: Kalter Krieg | Kubanische Raketenkrise | Fidel Castro

Ich möchte diese Formel zurückkehren: „Kubakrise“

+0

Ersatz funktioniert überall, nicht nur Anfang oder Ende. Ihre Zelle A2 enthält alle drei Strings? oder eine der genannten Saiten? –

+0

Hat 'A2'' Kalten Krieg | Schweinebucht | Fidel Castro in der Zelle? Oder sind das in 'A2',' B2', 'C2'? Sie können etwas weiter kommen, wenn Sie 'Text zu Spalten' verwenden und die' | 'als Trennzeichen verwenden können. Dadurch werden Ihre Daten in drei Spalten aufgeteilt, die Sie leichter gegeneinander abgleichen können. Außerdem nehme ich an, dass die Reihenfolge keine Rolle spielt? – BruceWayne

+0

Entschuldigung, ja, "Cold War | Schweinebucht | Fidel Castro" ist die Zeichenfolge in der Zelle. Gleiches gilt für "Kalter Krieg | Kubanische Raketenkrise | Fidel Castro" – DukeSilver

Antwort

6

Sie können so etwas wie dieses versuchen ...

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 

Dann können Sie diese UDF verwenden, wie unten ...

=CompareStrings(A2,B2) 

Wenn Sie sie in umgekehrter Reihenfolge vergleichen wollen auch und geben die nicht abgestimmt Zeichenfolge Teil von einem von ihnen, versuchen Sie dies ...

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 

verwenden nach wie vor unten wie ...

=CompareStrings(A2,B2) 

So wird die Funktion zunächst Vergleichen Sie die Zeichenfolge Teile B2 mit A2 und wenn es irgendeine Diskrepanz findet, wird es, dass ein Teil der Zeichenkette zurück, und Wenn es keine Übereinstimmung findet, wird es alle Teile der Zeichenfolge in A2 mit B2 vergleichen und jeden nicht übereinstimmenden Teil der Zeichenfolge zurückgeben. So wird es beide Wege vergleichen.

enter image description here

+0

Das macht den Job. Vielen Dank! Ich erkenne jetzt, dass einige der Antworten leere Strings zurückgeben, wobei eine Zelle weniger Abschnitte als die andere hat. Zum Beispiel, wenn der Schlüssel (A2) enthält "Cold War | Schweinebucht | Fidel Castro", aber sie (B2) "Cold War | Schweinebucht" beantwortet, dann '' CompareStrings (A2, B2) 'zurück" " . Ich habe versucht, es umzukehren, also wird es '= CompareStrings (B2, A2)', aber das bringt gerade "Schweinebucht" zurück. Wäre es möglich, '= CompareStrings (A2, B2)' in diesem Fall "Fidel Castro" zurückzugeben? – DukeSilver

+0

Gern geschehen. Bearbeitete die Lösung und fügte eine weitere UDF hinzu, die beide Wege miteinander vergleicht. – sktneer

+0

Fantastisch. Vielen Dank! – DukeSilver

Verwandte Themen