【问题标题】:Compare columns from two different sheets and append the matched data比较两个不同工作表中的列并附加匹配的数据
【发布时间】:2020-04-27 17:16:18
【问题描述】:

我有两个想要合并的数据源。

来源 1

Sheet1 上的数据源包含 2 列:AccountID 和 Cost。源在单元格 A3:B3 中(数据行从 A4 开始)。数据持续 1 到 N 行。辅助单元格包含要在此源中使用的所有记录的年份值。它在 D1 单元格中。

来源 2

Sheet2 上的数据源包含 6 列,范围为 A1:F1(数据从第 2 行开始):年份、帐户 ID、位置、电话号码、电子邮件类型和成本。数据持续 1 到 N 行。

我希望根据每个数据范围(Sheet1 列 A,Sheet2 列 B)的 AccountID 连接两个表的记录,其中年份(来自 Sheet1!D1)被添加到 Sheet2 数据的所有记录中,并且通过 AccountID 匹配的记录包含加入数据时包含的信息。

示例 #1

AccountID“1234”在 Sheet1 上,但不在 Sheet2 上。年份值 (Sheet1!D1) 包含 2020。最终结果将在 Sheet2 中添加一个 AccountID 为“1234”的新行、关联的成本值和 2020 年。

示例 #2

AccountID“1234”在 sheet1 和 Sheet2 上。 Sheet2 上的记录的年份值为 2019。Sheet1 上的记录具有与之关联的 2020 年(Sheet1!D1 单元格值)。最终结果将在 Sheet2 中包含两行 AccountID 为“1234”的数据,一行用于 2019 年的记录,另一行用于 2020 年的记录,如 Sheet1 数据源中所示。后者不包括 Location、Phone# 或 Email 类型值,因为它们没有在任何地方指定。

图片

表 1:

表 2:

从sheet1填充数据后的Sheet2:

【问题讨论】:

  • 大卫,我有一个解决方案,但由于我不明白的原因,该问题已关闭。我太陌生了,无法在这个论坛上回答问题,不知道还能做什么。

标签: excel vba append compare powerquery


【解决方案1】:

这可以通过 Power Query 完成。以下查询假定您已使用数据创建了表,在 Sheet1 上命名为“Table1”,在 Sheet2 上命名为“Table2”。这将需要 5 个单独的查询:2 个用于数据表、一个函数、一个合并表和一个用于合并数据的最终查询。对于所有这些,添加一个新的空白查询(数据选项卡 > 获取数据 > 从其他来源 > 空白查询)。您还需要为 Sheet1 上名为“YearValue”的单元格 D1 创建一个命名范围。

年值函数

将以下代码粘贴到高级编辑器(Power Query > View > Advanced Editor)。将名称(右侧)更改为“YearValue”。

let
    Source = Excel.CurrentWorkbook(){[Name="YearValue"]}[Content]{0}[Column1]
in
    Source

仅关闭并加载到连接。

表 1 查询

将以下代码粘贴到高级编辑器(Power Query > View > Advanced Editor)。将名称(右侧)更改为“Table1”。

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    TypeColumns = Table.TransformColumnTypes(Source,{{"AccountID", Int64.Type}, {"Cost", Int64.Type}}),
    AddYearColumn = Table.AddColumn(TypeColumns, "Year", each YearValue)
in
    AddYearColumn

仅关闭并加载到连接。

表 2 查询

将以下代码粘贴到高级编辑器(Power Query > View > Advanced Editor)。将名称(右侧)更改为“Table2”。

let
    Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    TypeColumns = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}, {"AccountID", Int64.Type}, {"Location", type text}, {"Phone#", type text}, {"Email type", type text}, {"Cost", Int64.Type}})
in
    TypeColumns

仅关闭并加载到连接。

合并表查询

将以下代码粘贴到高级编辑器(Power Query > View > Advanced Editor)。将名称(右侧)更改为“MergeTable”。

let
    Source = Table.FromColumns({List.Distinct(List.Select(Table1[AccountID]&Table2[AccountID],each _ <> null))},type table[AccountID = text]),
    MergeQueries = Table.NestedJoin(Source,{"AccountID"},Table1,{"AccountID"},"Table1",JoinKind.LeftOuter),
    ExpandedTable1 = Table.ExpandTableColumn(MergeQueries, "Table1", {"AccountID", "Cost", "Year"}, {"Table1.AccountID", "Table1.Cost", "Table1.Year"}),
    MergeQueries2 = Table.NestedJoin(ExpandedTable1,{"AccountID"},Table2,{"AccountID"},"Table2",JoinKind.LeftOuter),
    ExpandedTable2 = Table.ExpandTableColumn(MergeQueries2, "Table2", {"Year", "AccountID", "Location", "Phone#", "Email type", "Cost"}, {"Table2.Year", "Table2.AccountID", "Table2.Location", "Table2.Phone#", "Table2.Email type", "Table2.Cost"}),
    RemoveColumns = Table.RemoveColumns(ExpandedTable2,{"AccountID", "Table2.Year", "Table2.AccountID", "Table2.Cost"}),
    ReorderColumns = Table.ReorderColumns(RemoveColumns,{"Table1.Year", "Table1.AccountID", "Table2.Location", "Table2.Phone#", "Table2.Email type", "Table1.Cost"}),
    RenameColumns = Table.RenameColumns(ReorderColumns,{{"Table1.Year", "Year"}, {"Table1.AccountID", "AccountID"}, {"Table2.Location", "Location"}, {"Table2.Phone#", "Phone#"}, {"Table2.Email type", "Email type"}, {"Table1.Cost", "Cost"}})
in
    RenameColumns   

仅关闭并加载到连接。

组合表查询

将以下代码粘贴到高级编辑器(Power Query > View > Advanced Editor)。将名称(右侧)更改为“CombineTables”。

let
    Source = Table.Combine({Table2, MergeTable}),
    FilterRows = Table.SelectRows(Source, each ([Year] <> null)),
    SortRows = Table.Sort(FilterRows,{{"AccountID", Order.Ascending}})
in
    SortRows

关闭并加载工作表(根据需要)。

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多