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

huangapple go评论93阅读模式
英文:

VBA for combining new columns into a table involving extra work on displaying all possible combinations

问题

我有一个表格,例如:

国家 性别
A 男性
B 女性

然后我有3个爱好:睡觉、跑步和玩耍。
然后我有2个团队:红队和蓝队。

我想在VBA中实现的目标是复制该表格,并在其后添加爱好和团队列,直到列出所有组合。换句话说,这是一个列出组合的问题,但我们需要将表格作为整体视为组合的一个维度:

国家 性别 爱好 团队
A 男性 睡觉 红队
B 女性 睡觉 红队
A 男性 睡觉 蓝队
B 女性 睡觉 蓝队
A 男性 跑步 红队
B 女性 跑步 红队
A 男性 跑步 蓝队
B 女性 跑步 蓝队
A 男性 玩耍 红队
B 女性 玩耍 红队
A 男性 玩耍 蓝队
B 女性 玩耍 蓝队

我想首先列出所有爱好和团队的组合。爱好有3个值,团队有2个。

然后,我考虑遍历“国家性别”表格中的每一行,并将“爱好和团队”的6种可能组合添加到其中。

但我想我技术上还不足以编写这个。

谢谢!

英文:

I have a table, for example:

Country Gender
A Male
B Female

Then I have 3 hobbies: sleep, run and play.
Then I have 2 teams: red and blue.

What I want to achieve in vba is to duplicate the table and add hobby and team column after it until all combinations are listed out. In other words, this is a listing combination question, but we need to treat a table as a whole to be a dimension in the combination:

Country Gender Hobby Team
A Male Sleep Red
B Female Sleep Red
A Male Sleep Blue
B Female Sleep Blue
A Male Run Red
B Female Run Red
A Male Run Blue
B Female Run Blue
A Male Play Red
B Female Play Red
A Male Play Blue
B Female Play Blue

I was thinking first we can list out all combinations of hobby and team. Hobby has 3 values, team has 2.

Then I am thinking we can loop through the each of row within "Country Gender" table and adding the 6 possible combinations of "hobby and team" to it.

But I guess I am just technically not good enough to write this.

thx

答案1

得分: 2

以下是您提供的代码的翻译部分:

  1. // 将下一行更改为反映实际数据源
  2. Source = Excel.CurrentWorkbook(){[Name="Table21"]}[Content],
  3. #"更改类型" = Table.TransformColumnTypes(Source,{{"Country", type text}, {"Gender", type text}}),
  4. // 添加包含爱好和团队列表的列
  5. #"添加爱好" = Table.AddColumn(#"更改类型", "Hobby",
  6. each {"睡觉","跑步","玩游戏"}),
  7. #"添加团队" = Table.AddColumn(#"添加爱好", "Team",
  8. each {"红队","蓝队"}),
  9. // 展开列表以获取新行
  10. #"展开爱好" = Table.ExpandListColumn(#"添加团队", "Hobby"),
  11. #"展开团队" = Table.ExpandListColumn(#"展开爱好", "Team"),
  12. // 排序以按照您发布的顺序排列(如果您不想要此步骤,请省略)
  13. #"排序行" = Table.Sort(#"展开团队",{
  14. {"Hobby", Order.Descending},
  15. {"Team", Order.Descending},
  16. {"Gender", Order.Descending}})
  17. in
  18. #"排序行"

希望这对您有所帮助!如果您需要任何进一步的帮助,请随时告诉我。

英文:

This can also be accomplished using Power Query, available in Windows Excel 2010+ and Excel 365 (Windows or Mac)

To use Power Query

  • Select some cell in your Data Table
  • Data => Get&Transform => from Table/Range
  • When the PQ Editor opens: Home => Advanced Editor
  • Make note of the Table Name in Line 2
  • Paste the M Code below in place of what you see
  • Change the Table name in line 2 back to what was generated originally.
  • Read the comments and explore the Applied Steps to understand the algorithm
  1. let
  2. //Change next line to reflect actual data source
  3. Source = Excel.CurrentWorkbook(){[Name="Table21"]}[Content],
  4. #"Changed Type" = Table.TransformColumnTypes(Source,{{"Country", type text}, {"Gender", type text}}),
  5. //Add columns with a list of Hobbys and Teams
  6. #"Add Hobby" = Table.AddColumn(#"Changed Type", "Hobby",
  7. each {"Sleep","Run","Play"}),
  8. #"Add Team" = Table.AddColumn(#"Add Hobby", "Team",
  9. each {"Red","Blue"}),
  10. //Expand the lists to new rows
  11. #"Expanded Hobby" = Table.ExpandListColumn(#"Add Team", "Hobby"),
  12. #"Expanded Team" = Table.ExpandListColumn(#"Expanded Hobby", "Team"),
  13. //Sort to get to your posted order (or omit this step if you want
  14. #"Sorted Rows" = Table.Sort(#"Expanded Team",{
  15. {"Hobby", Order.Descending},
  16. {"Team", Order.Descending},
  17. {"Gender", Order.Descending}})
  18. in
  19. #"Sorted Rows"

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

huangapple
  • 本文由 发表于 2023年6月15日 06:43:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/76478018.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定