VBA возвращают различия между двумя ячейками строки [закрыто]

Я хочу сделать VBA UDF, который возвращает все различия между двумя ячейками, содержащими строки, разделенные запятыми. Он должен работать в обоих направлениях и не зависеть от порядка. Позволь мне объяснить :

пример 1

Ячейка N2: "C1, C2, C3"

Ячейка O2: "C2, C3"

или наоборот)

Ячейка N2: "C2, C3"

Ячейка O2: "C1, C2, C3"

Мне хотелось бы показать M2: «C1»

пример 2

Ячейка N2: «C1, C2, C4 , C5, C6 »;

Ячейка O2: «C1, C2, C5, C7 »

Или наоборот

Я бы хотел, чтобы M2 показывал: «C4, C6, C7» (я не против порядка, в котором показаны различия)

Надеюсь, вы поняли суть этого разговора, нужно показать какую-либо разницу, но если единственная разница в порядке, ничего не должно показаться.

excel-vba,

-6

Ответов: 1


1

Попробуйте этот UDF

Sub Test_Difference_UDF()
MsgBox Difference("C1, C2, C3", "C11, C2, C3, C4")
End Sub

Function Difference(txt1 As String, txt2 As String) As String
Dim x           As Variant
Dim y           As Variant
Dim f           As Boolean
Dim s           As String
Dim i           As Long
Dim j           As Long

If InStr(txt1, ", ") > 0 And InStr(txt2, ", ") > 0 Then
    x = Split(txt1, ", ")
    y = Split(txt2, ", ")

    For i = LBound(x) To UBound(x)
        f = False
        For j = LBound(y) To UBound(y)
            If x(i) = y(j) Then f = True
        Next j
        If Not f Then s = s & IIf(s = "", "", ", ") & x(i)
    Next i

    For j = LBound(y) To UBound(y)
        f = False
        For i = LBound(x) To UBound(x)
            If y(j) = x(i) Then f = True
        Next i
        If Not f Then s = s & IIf(s = "", "", ", ") & y(j)
    Next j
End If

Difference = s
End Function
первенствует-УВА,
Похожие вопросы