在Excel中不使用宏从多个现有表创建串联表

t40tm48m  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(116)

Excel可以从多个输入表创建串联表吗?我一直在使用python excel writer从主表中自动创建产品名称。我想知道是否有任何方法可以完全在Excel中完成下面的示例,而无需使用宏或外部工具。
产品类型主表
| 产品类型代码|说明|
| --------------|--------------|
| HBG|手提袋|
| CRBG|帆布可重复使用袋|
产品颜色主表
| 颜色代码|颜色名称|
| --------------|--------------|
| 研发部|红色|
| BU|蓝色|
| GR|绿色|
预期输出:
| 产品中心|说明|
| --------------|--------------|
| HBG-RD|红色手提袋|
| 公司简介|红色帆布可重复使用袋|
| HBG-BU|蓝色手袋|
| 公司简介|蓝色帆布可重复使用袋|
| HBG-GR|绿色手提袋|
| 公司简介|绿色帆布袋|

elcex8rz

elcex8rz1#

正如我所评论的,您可以使用Excel 2010+和Microsoft 365中提供的Power Query来完成此操作。

示例M编码:

let

//Read in the tables
    Source = Excel.CurrentWorkbook(){[Name="Types"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Product Type Code", type text}, {"Description", type text}}),
    Source2 = Excel.CurrentWorkbook(){[Name="Colors"]}[Content],
    #"Changed Type2" = Table.TransformColumnTypes(Source2,{{"Color Code", type text}, {"Color Name", type text}}),

//Add Custom Column to Types with all the color codes
    #"Add Colors" = Table.AddColumn(#"Changed Type", "Colors", each #"Changed Type2"),
    #"Expanded Colors" = Table.ExpandTableColumn(#"Add Colors", "Colors", {"Color Code", "Color Name"}, {"Color Code", "Color Name"}),

//Concatenate code and color
    #"Concat" = Table.FromColumns(
    {List.Transform(List.Zip({#"Expanded Colors"[Product Type Code], #"Expanded Colors"[Color Code]}), each Text.Combine(_,"-"))}
   & {List.Transform(List.Zip({#"Expanded Colors"[Color Name], #"Expanded Colors"[Description]}), each Text.Combine(_," "))},
   type table[Product=text, Description=text])

in
    #"Concat"

您的样本结果

xriantvc

xriantvc2#

如果你有Excel 365,你也可以使用公式:

=LET(pt,tblProductType, cc,tblColorCode,
cntRowsPt,ROWS(pt),cntRowsCC,ROWS(cc),
MAKEARRAY(cntRowsPt*cntRowsCC,2,LAMBDA(r,c,
  IF(c=1,
     INDEX(pt,INT(ROUNDUP(r/cntRowsCC,0)),1) & "-" & INDEX(cc,MOD(r-1,cntRowsCC)+1,1),
   INDEX(cc,MOD(r-1,cntRowsCC)+1,2) & " " & INDEX(pt,INT(ROUNDUP(r/cntRowsCC,0)),2))
)))

xzv2uavs

xzv2uavs3#

基于公式的替代方法:

=HSTACK(
    TOCOL(TOROW(tblProductType[Product Type Code]) & "-" & tblColorCode[Color Code]),
    TOCOL(tblColorCode[Color Name] & " " & TOROW(tblProductType[Description]))
)

相关问题