Здравствуйте! Помогите пож. с формулой Необходимо подтянуть данные с Листа1, «В» на Лист2, «В» При условии, что искомое значение в столбце «А» повторяется
Здравствуйте! Помогите пож. с формулой Необходимо подтянуть данные с Листа1, «В» на Лист2, «В» При условии, что искомое значение в столбце «А» повторяетсяexe
сделал вариант в Power Query, дабы освежить знания в памяти На Листе2 ПКМ по ячейке таблицы -> Обновить
[vba]
Код
let f1 = (a as table) as table=>let b=Table.ColumnNames(a){0} in Table.Sort(Table.SelectColumns(Table.Distinct(a, b), b), b), f2 = (a as text, optional b as any) as function=>let c = Splitter.SplitTextByDelimiter(a), d = Splitter.SplitTextByEachDelimiter({a}, 0, Logical.From(b)) in if b is null then c else d, f3 = (a as text) as text=>Text.Insert(a, Text.PositionOfAny(a, f4(0, 10)), "-"), f4 = (a as number, b as number) as list=>List.Transform(List.Numbers(a, b), each Text.From(_)), f5 = (a as table, b as any) as list=>let c = Table.ColumnNames(a), d = List.Count(c) in Table.ToRows(Table.FromColumns({c, List.Repeat({b}, d)})), f6=()=>each try Number.From(_) otherwise _, f7=(a as table)=>let b=Table.TransformColumns(a, f5(a, f6())), c=Table.Sort(b, f5(b, Order.Ascending)) in Table.TransformColumns(c, f5(c, Text.From)), f8 = (a as table, b as list, optional c as number) => let c = if c is null then 0 else c, d = try b{c}{2} otherwise b{c}{0}{0}, e = if b{c}{1} is list then Combiner.CombineTextByEachDelimiter else Combiner.CombineTextByDelimiter, f = Table.CombineColumns(a, b{c}{0}, e(b{c}{1}, 0), d) in if c+1 < List.Count(b) then @f8(f, b, c+1) else f, f9=(a as table, b as text, c as text)as table=>let d = Character.FromNumber(160), e = each Text.Replace(Text.Replace(Text.Trim(Text.Replace(Text.Replace(_, " ", d), c, " ")), " ", c), d, " ") in Table.TransformColumns(a, {b, e}), t0 = List.Transform({"Таблица1", "Таблица2"}, each Excel.CurrentWorkbook(){[Name=_]}[Content] as table), l1 = f4(4, List.Max(List.Transform(t5[4], each List.Count(Text.Split(_, "."))))), l2 = Table.ColumnNames(t0{0}), t1 = Table.SplitColumn(Table.TransformColumns(t0{0}, {l2{1}, f3}), l2{1}, f2("-"), f4(1, 2)), t2 = Table.AddIndexColumn(f8(f7(Table.TransformColumns(t1, f5(t1, f6()))), {{f4(1, 2), ""}}), "2", 0, 1), t3 = Table.Group(t2, {l2{0}}, {{"list", each Table.ToList(Table.SelectColumns(Table.Sort(_, {{"2", 0}}), "1")), type list}}), t4 = Table.SplitColumn(Table.SplitColumn(f1(t0{1}), l2{0}, f2("-", 0), {"1", "3"}), "1", f2("/", 0), f4(1, 2)), t5 = Table.SplitColumn(Table.TransformColumns(t4, {"3", each f3(_)}), "3", f2("-", 1), f4(3, 2)), t6 = f9(f8(f7(Table.SplitColumn(t5, "4", f2("."), l1)), {{l1, "."}, {f4(1, 4), {"/", "-"}, l2{0}}}), l2{0}, "."), t7 = Table.RenameColumns(Table.NestedJoin(t6, l2{0}, t3, l2{0}, "list", 1), {{"list", l2{1}}}), t8 = Table.ExpandListColumn(Table.TransformColumns(t7, {l2{1}, each try _[list]{0} otherwise {}}), l2{1}) in t8
[/vba]
сделал вариант в Power Query, дабы освежить знания в памяти На Листе2 ПКМ по ячейке таблицы -> Обновить
[vba]
Код
let f1 = (a as table) as table=>let b=Table.ColumnNames(a){0} in Table.Sort(Table.SelectColumns(Table.Distinct(a, b), b), b), f2 = (a as text, optional b as any) as function=>let c = Splitter.SplitTextByDelimiter(a), d = Splitter.SplitTextByEachDelimiter({a}, 0, Logical.From(b)) in if b is null then c else d, f3 = (a as text) as text=>Text.Insert(a, Text.PositionOfAny(a, f4(0, 10)), "-"), f4 = (a as number, b as number) as list=>List.Transform(List.Numbers(a, b), each Text.From(_)), f5 = (a as table, b as any) as list=>let c = Table.ColumnNames(a), d = List.Count(c) in Table.ToRows(Table.FromColumns({c, List.Repeat({b}, d)})), f6=()=>each try Number.From(_) otherwise _, f7=(a as table)=>let b=Table.TransformColumns(a, f5(a, f6())), c=Table.Sort(b, f5(b, Order.Ascending)) in Table.TransformColumns(c, f5(c, Text.From)), f8 = (a as table, b as list, optional c as number) => let c = if c is null then 0 else c, d = try b{c}{2} otherwise b{c}{0}{0}, e = if b{c}{1} is list then Combiner.CombineTextByEachDelimiter else Combiner.CombineTextByDelimiter, f = Table.CombineColumns(a, b{c}{0}, e(b{c}{1}, 0), d) in if c+1 < List.Count(b) then @f8(f, b, c+1) else f, f9=(a as table, b as text, c as text)as table=>let d = Character.FromNumber(160), e = each Text.Replace(Text.Replace(Text.Trim(Text.Replace(Text.Replace(_, " ", d), c, " ")), " ", c), d, " ") in Table.TransformColumns(a, {b, e}), t0 = List.Transform({"Таблица1", "Таблица2"}, each Excel.CurrentWorkbook(){[Name=_]}[Content] as table), l1 = f4(4, List.Max(List.Transform(t5[4], each List.Count(Text.Split(_, "."))))), l2 = Table.ColumnNames(t0{0}), t1 = Table.SplitColumn(Table.TransformColumns(t0{0}, {l2{1}, f3}), l2{1}, f2("-"), f4(1, 2)), t2 = Table.AddIndexColumn(f8(f7(Table.TransformColumns(t1, f5(t1, f6()))), {{f4(1, 2), ""}}), "2", 0, 1), t3 = Table.Group(t2, {l2{0}}, {{"list", each Table.ToList(Table.SelectColumns(Table.Sort(_, {{"2", 0}}), "1")), type list}}), t4 = Table.SplitColumn(Table.SplitColumn(f1(t0{1}), l2{0}, f2("-", 0), {"1", "3"}), "1", f2("/", 0), f4(1, 2)), t5 = Table.SplitColumn(Table.TransformColumns(t4, {"3", each f3(_)}), "3", f2("-", 1), f4(3, 2)), t6 = f9(f8(f7(Table.SplitColumn(t5, "4", f2("."), l1)), {{l1, "."}, {f4(1, 4), {"/", "-"}, l2{0}}}), l2{0}, "."), t7 = Table.RenameColumns(Table.NestedJoin(t6, l2{0}, t3, l2{0}, "list", 1), {{"list", l2{1}}}), t8 = Table.ExpandListColumn(Table.TransformColumns(t7, {l2{1}, each try _[list]{0} otherwise {}}), l2{1}) in t8