Чтобы сгенерировать «последовательно соответствующие значения, разделенные запятыми», я хотел бы предложить вам код VBA вместо любой сложной формулы, которая работает быстрее и лучше.
- Нажмите ALT+F11, чтобы открыть окна VB Editor.
- Выберите лист из окна Project Explorer.
- Щелкните правой кнопкой мыши и выберите Вставить, Модуль.
- Затем скопируйте и вставьте оба.
Как использовать: =GetDiffs1(A2,B2)&", "& GetDiffs2(A2,B2)
Function GetDiffs1(Cell1 As Range, Cell2 As Range) As String
Dim Array1, Array2, lLoop As Long
Dim strDiff As String, strDiffs As String
Dim lCheck As Long
Array1 = Split(Replace(Cell1, " ", ""), ",")
Array2 = Split(Replace(Cell2, " ", ""), ",")
On Error Resume Next
With WorksheetFunction
For lLoop = 0 To UBound(Array1)
strDiff = vbNullString
strDiff = .Index(Array2, 1, .Match(Array1(lLoop), Array2, 0))
If strDiff = vbNullString Then
lCheck = 0
lCheck = .Match(Array1(lLoop), Array2, 0)
If lCheck = 0 Then
strDiffs = strDiffs & "," & Array1(lLoop)
End If
End If
Next lLoop
End With
GetDiffs1 = Trim(Right(strDiffs, Len(strDiffs) - 1))
End Function
Function GetDiffs2(Cell1 As Range, Cell2 As Range) As String
Dim Array1, Array2, lLoop As Long
Dim strDiff As String, strDiffs As String
Dim lCheck As Long
Array1 = Split(Replace(Cell1, " ", ""), ",")
Array2 = Split(Replace(Cell2, " ", ""), ",")
On Error Resume Next
With WorksheetFunction
For lLoop = 0 To UBound(Array2)
strDiff = vbNullString
strDiff = .Index(Array1, 1, .Match(Array2(lLoop), Array1, 0))
If strDiff = vbNullString Then
lCheck = 0
lCheck = .Match(Array2(lLoop), Array1, 0)
If lCheck = 0 Then
strDiffs = strDiffs & "," & Array2(lLoop)
End If
End If
Next lLoop
End With
GetDiffs2 = Trim(Right(strDiffs, Len(strDiffs) - 1))
End Function