Страницы: 1
RSS
Сцепка по нескольким условиям, Прошу помочь составить формулу сцепки по нескольким полям
 
Всем привет.
Прошу помочь составить формулу, которая будет подтягивать все возможные поля по столбцу Промо, используя для этого дополнительные критерии Месяц, Наименование. Необходимый результат записан в последнем столбце, но записан при помощи примитивной формулы со ссылкой на ячейки, которые выбирались вручную.
Заранее благодарю
 
PQ
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Группа = Table.Group(Источник, {"Месяц", "СКЮ"}, {{"Количество", each _, type table [Месяц=nullable text, СКЮ=nullable text, Промо=nullable text]}}),
    Промо = Table.TransformColumns(Table.AddColumn(Группа, "Промо", each Table.Column([Количество],"Промо")), {"Промо", each Text.Combine(List.Transform(List.Distinct(_), Text.From), "; "), type text})
in
    Промо
 
Вариант с дополнительным столбцом.
Код
E2   =A2&"#"&B2
F2   =C2&ЕСЛИОШИБКА("; "&ВПР(E2;E3:$F$1048576;2;0);"")
 
Еще с допстолбцом
Код
Е  =ЕСЛИ(A2&B2=A1&B1;E1&", "&C2;C2)
F  =ПРОСМОТР(;-1/(A2&B2=A$2:A$7&B$2:B$7);E$2:E$7)
Изменено: _Boroda_ - 16.05.2022 14:29:37
Скажи мне, кудесник, любимец ба’гов...
 
Или макросом
Код
Sub Сцепка()
Dim arr As Variant, arr1 As Variant, i As Long, y As Variant
Set dic = CreateObject("Scripting.Dictionary")
lr = Cells(Rows.Count, 1).End(xlUp).Row
arr = Sheets("Лист1").Range("A2:C" & lr).Value
For i = 1 To UBound(arr)
    If Not dic.exists(arr(i, 1) & "|" & arr(i, 2)) Then
        dic.Add arr(i, 1) & "|" & arr(i, 2), CStr(arr(i, 3))
    Else
        dic.Item(arr(i, 1) & "|" & arr(i, 2)) = dic.Item(arr(i, 1) & "|" & arr(i, 2)) & "; " & CStr(arr(i, 3))
    End If
Next
ReDim arr1(1 To dic.Count, 1 To 3)
i = 1
For Each y In dic
    arr1(i, 1) = Split(y, "|")(0)
    arr1(i, 2) = Split(y, "|")(1)
    arr1(i, 3) = dic.Item(y)
    i = i + 1
Next
Cells(2, 6).Resize(UBound(arr1), 3) = arr1
End Sub
 
Всем спасибо!
Очень помогли!!
 
Или ещё примитивный вариант с PQ
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content],
    #"Merged Columns" = Table.CombineColumns(Source,{"Месяц", "СКЮ"},Combiner.CombineTextByDelimiter("/", QuoteStyle.None),"Merged"),
    #"Grouped Rows" = Table.Group(#"Merged Columns", {"Merged"}, {{"Count",  each Table.Skip(Table.Transpose(_), 1)}}),
    #"Expanded Count" = Table.ExpandTableColumn(#"Grouped Rows", "Count", {"Column1", "Column2"}, {"Count.Column1", "Count.Column2"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Expanded Count","Merged",Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv),{"Merged.1", "Merged.2"}),
    #"Merged Columns1" = Table.CombineColumns(#"Split Column by Delimiter",{"Count.Column1", "Count.Column2"},Combiner.CombineTextByDelimiter("; ", QuoteStyle.None),"Merged"),
    #"Renamed Columns" = Table.RenameColumns(#"Merged Columns1",{{"Merged.1", "Месяц"}, {"Merged.2", "СКЮ"}, {"Merged", "Промо"}})
in
    #"Renamed Columns"
Страницы: 1
Наверх