excel 用于将新列合并到表中的VBA,涉及显示所有可能组合的额外工作

nc1teljy  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(140)

我有一张table,例如:
| 国家|性别|
| - -----|- -----|
| 一个|男性|
| B|女性|
我有三个爱好:睡觉、跑步和玩耍。我有两个团队:红色和蓝色。
我想在vba中实现的是复制表,并在它后面添加爱好和团队列,直到所有组合都列出来。换句话说,这是一个列表组合问题,但我们需要将一个表作为一个整体来对待,以成为组合中的一个维度:
| 国家|性别|爱好|团队|
| - -----|- -----|- -----|- -----|
| 一个|男性|睡觉|红色|
| B|女性|睡觉|红色|
| 一个|男性|睡觉|蓝色|
| B|女性|睡觉|蓝色|
| 一个|男性|快跑|红色|
| B|女性|快跑|红色|
| 一个|男性|快跑|蓝色|
| B|女性|快跑|蓝色|
| 一个|男性|玩|红色|
| B|女性|玩|红色|
| 一个|男性|玩|蓝色|
| B|女性|玩|蓝色|
我在想,我们可以先列出爱好和团队的所有组合。爱好有三个价值观,团队有两个。
然后我想我们可以循环遍历“国家性别”表中的每一行,并添加“爱好和团队”的6种可能组合。
但我想我只是技术上不够好,写这个。
thx

a6b3iqyw

a6b3iqyw1#

这也可以使用Windows Excel 2010+和Excel 365(Windows或Mac)中提供的Power Query来完成
使用Power Query

  • 选择数据表中的某个单元格
  • Data => Get&Transform => from Table/Range
  • PQ编辑器打开时:Home => Advanced Editor
  • 记下第2行中的表名称
  • 将下面的M代码粘贴到您所看到的位置
  • 将第2行中的Table名称更改回最初生成的名称。
  • 阅读评论并探索Applied Steps以了解算法
let

//Change next line to reflect actual data source
    Source = Excel.CurrentWorkbook(){[Name="Table21"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Country", type text}, {"Gender", type text}}),

//Add columns with a list of Hobbys and Teams
    #"Add Hobby" = Table.AddColumn(#"Changed Type", "Hobby", 
        each {"Sleep","Run","Play"}),
        
    #"Add Team" = Table.AddColumn(#"Add Hobby", "Team", 
        each {"Red","Blue"}),

//Expand the lists to new rows
    #"Expanded Hobby" = Table.ExpandListColumn(#"Add Team", "Hobby"),
    #"Expanded Team" = Table.ExpandListColumn(#"Expanded Hobby", "Team"),

//Sort to get to your posted order (or omit this step if you want
    #"Sorted Rows" = Table.Sort(#"Expanded Team",{
        {"Hobby", Order.Descending}, 
        {"Team", Order.Descending}, 
        {"Gender", Order.Descending}})
in
    #"Sorted Rows"

相关问题