答案1
看起来您希望按照客户在表格中列出的确切顺序对其进行筛选,因为您已使用不同的颜色突出显示了它们。这可以使用 Power Query 轻松完成。在我发布的示例中,有 3 个查询:第一个查询指的是在“主”工作表中导入表格,第二个查询“按原样”创建索引,以便在第三个也是最后一个查询中,记录以建议的方式列出:
第一个查询称为“Table1”,通过 M 代码检索(与后续两个一样):
let
Font = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Font,{{"ID", type text}, {"Product", type text}, {"Color", type text}, {"Nation", type text}, {"Quantity", Int64.Type}})
in
#"Changed Type"
第二个查询名为“ID”:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"Product", type text}, {"Color", type text}, {"Nation", type text}, {"Quantity", Int64.Type}}),
#"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"ID"})
in
#"Removed Other Columns"
第三个“结果表”用于在 Excel 前端的新工作表中填充所需的结果:
let
Source = Table.NestedJoin(ID, {"ID"}, Table1, {"ID"}, "Table1", JoinKind.LeftOuter),
#"Removed Columns" = Table.RemoveColumns(Source,{"ID"}),
#"Expanded Table1" = Table.ExpandTableColumn(#"Removed Columns", "Table1", {"ID", "Product", "Color", "Nation", "Quantity"}, {"ID", "Product", "Color", "Nation", "Quantity"})
in
#"Expanded Table1"
因此,关闭 PQ 并返回 Excel 的前端,将“结果表”加载到工作表中。这可以通过右键单击其名称并选择“加载到...”来完成,然后根据需要选择目标工作表。
答案2
我将创建一个新表(不仅仅是一个范围,而是一个“Ctrl+T”表)来保存您感兴趣的客户列表,因为感觉这个列表每次或至少随着时间的推移可能会发生变化。给该表起一个合理的名称,例如“FilterCustomers”。使用 Power Query 将该表拉入,方法是选择表中的任意单元格,然后转到数据 > 来自表或范围。
当您执行“关闭并加载 > 关闭并加载到”时,选择“仅创建连接”。现在您有一个引用该表的查询。返回您的原始数据范围,将其也制作成一个表,然后以相同的方式将其加载到 Power Query 中。
(如果这些数据位于您正在加载或粘贴的外部文件(如 CSV)中,则最好构建一个直接提取该文件的解决方案,以从手动过程中删除一些步骤)。
将数据加载到 Power Query 后,添加合并查询步骤(相当于数据库连接),将主数据中的 ID 与过滤表中的 ID 或客户名称关联,选择内连接类型,然后单击确定,这样您将只获取与过滤列表中的条目匹配的主数据中的行。
您可以添加几种排序,这样您就可以获得按客户、产品或其他任何您想要的方式排序的最终数据。单击“关闭并加载”,您就会得到您想要的新数据表。
您可以更改客户列表并刷新新表(右键单击 > 刷新,或数据 > 全部刷新)。新的主要数据?将其粘贴,然后刷新。