2016-08-18 2 views
0

Im Wesentlichen möchte ich den Inhalt von 2 Zellen vergleichen und dann eine neue Zelle mit dem Unterschied bevölkern. Die 2 Zellen, die ich suche, um den Inhalt von zu vergleichen, sind beide Liste, die Produktnamen enthält. Ein Beispiel wäre:Vergleichen Sie den Inhalt von 2 Zellen und kopieren Sie dann alle Unterschiede in eine neue Zelle

Zelle 1 enthält, a, b, c, d
Zelle 2 enthält, b, c

I Zelle dann 3 mit A und D

Ich bin im wesentlichen füllen möchte Ich suche das Gegenteil einer vlookup-Funktion, weiß aber nicht, wie ich das machen würde.

Vielen Dank im Voraus für Ihre Hilfe.

+0

Können Sie besser Ihr Problem definieren (Ich bin mir nicht sicher, wie Sie in Ihrem Beispiel "A und B" als gewünschten Rückgabewert erhalten haben. Kannst du uns auch zeigen, was du bisher versucht hast und warum deine Versuche gescheitert sind? – Mikegrann

+0

Hoppla, das war ein Tippfehler. Ich habe es korrigiert. A und D wären mein gewünschter Rückgabewert, da sich A & D nur in Zelle 1 und nicht in Zelle 2 befinden. Ich denke, ich muss eine Art umgekehrte Übereinstimmungsfunktion verwenden, aber immer noch versuchen, das herauszufinden – Bzinck15105

+1

Verwenden Sie Split (cellValue, ","), um Arrays aus jeder Zelle zu erstellen, dann die Elemente im ersten Array zu durchlaufen und 'Match()' zu verwenden, um zu sehen, ob sie im zweiten Array enthalten sind. –

Antwort

0

Hier ist ein UDF Sie dafür verwenden könnte:

' Returns a `delimiter`-joined list containing 
' items from minuend (a `delimiter`-joined list) 
' but not items from subtrahend (a `delimiter`-joined list) 
Public Function SET_SUB(minuend As String, subtrahend As String, Optional delimiter As Variant) 
    If IsMissing(delimiter) Then delimiter = "," ' Set default delimiter as comma 

    Dim i As Integer 
    Dim emptyList As Boolean: emptyList = True 

    ' Retrieve list items 
    Dim fullSet As Variant 
    Dim removeSet As Variant 
    fullSet = Split(minuend, delimiter) 
    removeSet = Split(subtrahend, delimiter) 

    SET_SUB = "" 

    ' Loop through subtrahend, removing matches 
    For i = 0 To UBound(fullSet) 
     If IsError(Application.Match(fullSet(i), removeSet, 0)) Then 
      SET_SUB = SET_SUB & fullSet(i) & delimiter 
      emptyList = False 
     End If 
    Next 

    ' Remove last delimiter for non-empty list 
    If Not emptyList Then 
     SET_SUB = Left(SET_SUB, Len(SET_SUB) - Len(delimiter)) 
    End If 
End Function 

Tropfen, die in einem Modul und der Funktion wird auf dem Arbeitsblatt (Informationen zu UDF here, wenn Sie nicht vertraut sind) zugänglich sein.

Er nimmt die Elemente in der ersten Liste, entfernt die Elemente in der zweiten Liste und gibt die festgelegte Differenz zurück. Sie können optional ein "delimiter" -Argument hinzufügen, wenn Sie Listen wollen, die durch Kommas getrennt sind.

Aufbau aus Ihrem Beispiel:

A1 = a, b, c, d

A2 = b, c

A3 = =SET_SUB(A1, A2) = a, d

Für eine durch Semikolon getrennte Liste:

A1 = a, b, c, d

A2 = b, c

A3 = =SET_SUB(A1, A2, ";") = a; d

Verwandte Themen