提问人:Robert Eldridge 提问时间:11/14/2023 最后编辑:Robert Eldridge 更新时间:11/15/2023 访问量:63
有没有办法使用 VBA/Power Query 对 Excel 中的两个表执行交叉联接?
Is there a way to perform a cross join on two tables in Excel using VBA/Power Query?
问:
我目前有两个工作表:一个是公司项目的滚动列表,每隔一段时间就会添加到一个工作表中,另一个是提供与每个项目相关的任务列表(大约 110 个任务)。我的理想状态是我们的管理员将一个新项目添加到项目表中,我想运行一个脚本或流程,将所有新项目(用 [project id] 表示)添加到主表中(每次运行时,它都会将新数据附加到记录的底部),并为每个任务制作一行, 将任务放在相邻列中。[编辑] - 此过程需要自动化,无论是通过计划刷新还是通过记录新项目启动的按钮/触发器。
项目表
项目编号 | 属性 |
---|---|
PID1型 | XXXXX公司 |
PID2 | XXXXX公司 |
PID3 | XXXXX公司 |
任务表
检查站 | 任务 |
---|---|
CP1型 | 任务 1 |
CP2型 | 任务 2 |
FPV的 | 任务 3 |
新建表格
项目编号 | 检查站 | 任务 |
---|---|---|
PID1型 | CP1型 | 任务 1 |
PID1型 | CP2型 | 任务 2 |
PID1型 | FPV的 | 任务 3 |
PID2 | CP1型 | 任务 1 |
PID2 | CP2型 | 任务 2 |
PID2 | FPV的 | 任务 3 |
我想运行 SQL 来完成此操作,因为这很容易完成,但我不知道如何在不使用 Power Automate 的情况下做到这一点。但是,我不能使用 PA,因为这些文件位于 SharePoint 上,并且需要与我拥有的许可证不同的许可证。
我尝试使用 Power Query,但由于我没有任何常用列,因此我无法将正确的列填充到平面表中。我也尝试了 Power Automate,但遇到了许可问题。我已经考虑过使用 Access 的想法,但还没有做任何事情。
答:
将两个表作为查询加载。然后,在一个中添加一个自定义列,对于公式,只需引用另一个查询(例如,如果您在项目中,请使用 =Tasks 作为公式)。这将为每一行创建一个表。然后,只需使用列顶部的双向箭头展开表格即可。
评论
此答案也使用 Power Query,与上一个答案非常相似,但此答案仅将新行追加到主表,同时保留具有数据输入的任何其他列。
Power Query 中的查询:
查询 | 加载到 ... |
---|---|
tbl项目 | 仅连接 |
tbl任务 | 仅连接 |
tblMain 现有 | 仅连接 |
tblMain | 桌子 |
查询 , , - 很简单,可以拉入工作表中的相应表格。tblProject
tblTask
tblMain Existing
查询是完成所有工作的工作,也是作为表加载的查询。 从工作表中加载到同一个表中。步骤:tblMain
tblMain Existing
tblMain
- 参考
tblProject
- 左 Anti(仅在第一行中)与 on 合并。这样一来,您就只剩下自上次刷新以来添加的新项目。
tblMain Existing
ProjectID
- 删除合并列
- 添加新的列引用(与上一个答案相同)
Tasks
tblTask
- 展开任务
- 追加上一步
tblMain - Existing
= Table.Combine({#"tblMain Existing", #"Expanded Tasks"})
我创建了一个示例电子表格:https://1drv.ms/x/s!AtpcKzRsDrY1o7Vk6bgpWE8AH7wTqw?e=umWQ8x
评论