Как объединить ячейки одного столбца, если значения в другом столбце совпадают? Моя формула не работает - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть значения в моей таблице исключений как таковые,

Data1        Data2

key11        value21
key11        value22
key13        value23
key14        value24
key14        value25

И мне нужно, чтобы данные были

Data1        Data2        

key11        value21 value22     
key13        value23
key14        value24 value25

Я пробовал с C2=IF(A2=A3,B1&B2,B3)

A столбец Data1, а столбец B Data2

Но даже если значения не совпадают, я получаю копию b3 в c2.

Более 1000+ ячеек

Ответы [ 3 ]

2 голосов
/ 28 февраля 2020

С TEXTJOIN ():

=TEXTJOIN(" ",TRUE,IF(A2:A6=C2,B2:B6,""))

В зависимости от версии это может потребоваться подтвердить с помощью Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования.

enter image description here

1 голос
/ 29 февраля 2020

Поскольку вы опубликовали решение VBA, вот оно с использованием Power Query, доступное в Excel 2010 +

После настройки запроса вы можете отредактировать свой источник данных, а затем refre sh Ваш запрос для обновления результатов.

  • Выберите ячейку в таблице
  • Data -> Get & Transform -> From Table/Range
  • В редакторе PQ: выберите столбец Data1 и Group By
    • Назовите результирующий столбец Grouped
  • Выберите таблицу результатов столбец и
    • Добавить пользовательский столбец
      • Формула: = Table.Column ([Сгруппированный], "Data2")
      • Имя нового столбца Data2
    • Выберите двуглавую стрелку в новом столбце Data2 и
      • Извлеките значения, используя разделитель Comma
  • Удалите столбец таблицы:

Вот M-Code, который вы можете вставить в расширенный редактор, хотя вам может потребоваться изменить строку источника в зависимости от имени таблицы данных.

* 10 50 * М-код
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Data1", type text}, {"Data2", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Data1"}, {{"Grouped", each _, type table [Data1=text, Data2=text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Data2", each Table.Column([Grouped],"Data2")),
    #"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Data2", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
    #"Removed Columns" = Table.RemoveColumns(#"Extracted Values",{"Grouped"})
in
    #"Removed Columns"

enter image description here

0 голосов
/ 29 февраля 2020

Я только что получил помощь извне, поэтому подумал, что это поможет, если кому-то еще это понадобится. Это достижимо с помощью кода VBA. Думаю, мне нужно скоро выучить этот материал. Вот код.

Sub ConcatenateCellsIfSameValues()
Dim xCol As New Collection
Dim xSrc As Variant
Dim xRes() As Variant
Dim I As Long
Dim J As Long
Dim xRg As Range
xSrc = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Resize(, 2)
Set xRg = Range("D1")
On Error Resume Next
For I = 2 To UBound(xSrc)
    xCol.Add xSrc(I, 1), TypeName(xSrc(I, 1)) & CStr(xSrc(I, 1))
Next I
On Error GoTo 0
ReDim xRes(1 To xCol.Count + 1, 1 To 2)
xRes(1, 1) = "Data1"
xRes(1, 2) = "Data2"
For I = 1 To xCol.Count
    xRes(I + 1, 1) = xCol(I)
    For J = 2 To UBound(xSrc)
        If xSrc(J, 1) = xRes(I + 1, 1) Then
            xRes(I + 1, 2) = xRes(I + 1, 2) & ", " & xSrc(J, 2)
        End If
    Next J
    xRes(I + 1, 2) = Mid(xRes(I + 1, 2), 2)
Next I
Set xRg = xRg.Resize(UBound(xRes, 1), UBound(xRes, 2))
xRg.NumberFormat = "@"
xRg = xRes
xRg.EntireColumn.AutoFit
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...