首页 > 解决方案 > 逐行组合 Excel 表/范围

问题描述

我有两个清单。一个包含名称,另一个包含车间信息。

所以清单一个看起来像这样:

Name 1
Name 2
Name 3
.
.
Name X

此列表来自外部查询,并被格式化为表格。它的内容不时变化。

另一个看起来像这样,只是格式化为表格(没有基础查询):

Workshop 1
Workshop 2
Workshop 3
Workshop 4

我想结合这两个列表,结果应该是这样的:

Name 1 | Workshop 1
Name 1 | Workshop 2
Name 1 | Workshop 3
Name 1 | Workshop 4
Name 2 | Workshop 1
.
.
.
and so on.

因此,如您所见,总行数增加了四倍。由于第一个表已经有大约 400 行,因此不能选择复制和粘贴。

我不知道如何解决这个问题。我发现的只是关于 JOIN 表,但因此我需要一些我在这里没有的常用列。

有没有办法用公式/电源查询来解决这个问题?还是我必须使用 VBA?

期待一些支持,

关于奥拉夫

标签: excelvba

解决方案


Power Query方法。

您在工作表上创建了两个表 - 一个命名NameTable为另一个WorkshopTable

为每个表创建一个仅连接查询。我已经命名了这些NameTableQueryWorkshopTableQuery

let
    Source = Excel.CurrentWorkbook(){[Name="NameTable"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}})
in
    #"Changed Type"  

let
    Source = Excel.CurrentWorkbook(){[Name="WorkshopTable"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Workshop", type text}})
in
    #"Changed Type"

现在创建两者的笛卡尔积。从一个引用开始,然后将另一个添加为您展开的新列:

let
    Source = WorkshopTableQuery,
    #"Add Names" = Table.AddColumn(Source, "Names", each NameTableQuery),
    #"Expanded Names" = Table.ExpandTableColumn(#"Add Names", "Names", {"Name"}, {"Name"})
in
    #"Expanded Names"  

你的决赛桌将是:

| Workshop   | Name   |
|------------|--------|
| Workshop 1 | Name 1 |
| Workshop 1 | Name 2 |
| Workshop 1 | Name 3 |
| Workshop 1 | Name 4 |
| Workshop 1 | Name 5 |
| Workshop 2 | Name 1 |
| Workshop 2 | Name 2 |
| Workshop 2 | Name 3 |
| Workshop 2 | Name 4 |
| Workshop 2 | Name 5 |

推荐阅读