2016-08-18 58 views
0

本質上來說,我期望比較2個單元格的內容,然後用不同的方法填充一個新單元格。我期待比較的2個單元格的內容都是包含產品名稱的列表。一個例子是:比較2個單元格的內容,然後將任何差異複製到一個新單元格中

小區1含有A,B,C,d
細胞2含有B,C

我想細胞3〜然後用A和d

填充

我本質希望做一個vlookup函數的反面,但不知道我會怎麼做。

在此先感謝您的幫助。

+0

你能更好地定義你的問題(我不確定你如何在你的例子中得到「A和B」作爲期望的返回值)?你還可以向我們展示你迄今爲止的嘗試,以及爲什麼你的嘗試失敗了? – Mikegrann

+0

哎呀,這是一個錯字。我糾正了它。 A和D是我想要的返回值,因爲A&D僅位於單元格1中,而不是單元格2.我想我需要使用某種反向匹配函數,但仍試圖計算出結果 – Bzinck15105

+1

使用'Split(cellValue, 「,」)'從每個單元格創建數組,然後遍歷第一個數組中的元素並使用'Match()'來查看它們是否包含在第二個數組中。 –

回答

0

這裏的UDF中,你可以使用這個:

' 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 

丟棄的模塊和功能將在你的工作訪問(如果你不熟悉的UDF的here信息)。

它將第一個列表中的項目刪除,刪除第二個列表中的項目並返回設置的差異。如果您希望列表以逗號以外的名稱分隔,則可以選擇添加「分隔符」參數。

構建關閉你的例子:

A1 = A,B,C,d

A2 = B,C

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

對於以分號分隔的列表:

A1 =一; C;,B d

A2 = B; C

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

相關問題