Объединить значения столбца B на основе общих значений столбца A - PullRequest
0 голосов
/ 02 июля 2019

В Excel, как я могу объединить значения Column B на основе общих значений на Column A?

В основном мне нужно что-то вроде этого

enter image description here

Ответы [ 3 ]

6 голосов
/ 02 июля 2019

Вы можете использовать этот UDF:

Function TEXTJOINIFS(rng As Range, delim As String, ParamArray arr() As Variant)
    Dim rngarr As Variant
    rngarr = Intersect(rng, rng.Parent.UsedRange).Value

    Dim condArr() As Boolean
    ReDim condArr(1 To Intersect(rng, rng.Parent.UsedRange).Rows.Count) As Boolean


    Dim i As Long
    For i = LBound(arr) To UBound(arr) Step 2
        Dim colArr() As Variant
        colArr = Intersect(arr(i), arr(i).Parent.UsedRange).Value
        Dim j As Long
        For j = LBound(colArr, 1) To UBound(colArr, 1)

            If Not condArr(j) Then
                Dim charind As Long
                charind = Application.Max(InStr(arr(i + 1), ">"), InStr(arr(i + 1), "<"), InStr(arr(i + 1), "="))
                Dim opprnd As String
                If charind = 0 Then
                    opprnd = "="
                Else
                    opprnd = Left(arr(i + 1), charind)
                End If
                Dim t As String
                t = """" & colArr(j, 1) & """" & opprnd & """" & Mid(arr(i + 1), charind + 1) & """"
                If Not Application.Evaluate(t) Then condArr(j) = True
            End If
        Next j
    Next i

    For i = LBound(rngarr, 1) To UBound(rngarr, 1)
        If Not condArr(i) Then
            TEXTJOINIFS = TEXTJOINIFS & rngarr(i, 1) & delim
        End If
    Next i

    TEXTJOINIFS = Left(TEXTJOINIFS, Len(TEXTJOINIFS) - Len(delim))

End Function

Вы бы назвали его так:

=IF(MATCH(A1,A:A,0)=ROW(A1),TEXTJOINIFS(B:B,", ",A:A,A1),"")

Теперь не имеет значения, отсортированы ли данные или нет, он будет только помещатьвывод в столбце C, где впервые появляется значение в столбце A.

enter image description here


enter image description here

1 голос
/ 02 июля 2019

Вот мой непроверенный код, конечно.Код ниже использует 2 цикла для добавления информации.

dim X as integer
dim X2 as integer

dim match as string

X = 1

do while sheets("sheet1").range("A" & X).value <> ""

    sheets("sheet1").range("C" & X).value = sheets("sheet1").range("B" & X).value
    match = sheets("sheet1").range("A" & X).value        
    X2 = X + 1

        do while sheets("sheet1").range("A" & X2).value = match

            sheets("sheet1").range("C" & X).value = sheets("sheet1").range("C" & X).value + ", " + sheets("sheet1").range("B" & X2).value 
            X2 = X2 + 1

        loop

    X = X2
    X = X + 1

Loop
0 голосов
/ 02 июля 2019

Использовать формулу массива:

=TEXTJOIN(", ",TRUE,IF(A$1:A$15=A1,B$1:B$15,""))

(используйте CTRL-SHIFT-ENTER вместо ENTER для ввода формулы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...