有没有办法使用 VBA/Power Query 对 Excel 中的两个表执行交叉联接?

Is there a way to perform a cross join on two tables in Excel using VBA/Power Query?

提问人:Robert Eldridge 提问时间:11/14/2023 最后编辑:Robert Eldridge 更新时间:11/15/2023 访问量:63

问:

我目前有两个工作表:一个是公司项目的滚动列表,每隔一段时间就会添加到一个工作表中,另一个是提供与每个项目相关的任务列表(大约 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 的想法,但还没有做任何事情。

Excel PowerQuery 交叉联接

评论

0赞 Sam Nseir 11/15/2023
生成的表中是否有任何数据输入?
0赞 Robert Eldridge 11/15/2023
@SamNseir - 最终是的,会添加日期。但如果有必要,我可以再做一张纸。

答:

2赞 Rory 11/15/2023 #1

将两个表作为查询加载。然后,在一个中添加一个自定义列,对于公式,只需引用另一个查询(例如,如果您在项目中,请使用 =Tasks 作为公式)。这将为每一行创建一个表。然后,只需使用列顶部的双向箭头展开表格即可。

评论

0赞 Robert Eldridge 11/15/2023
箭头展开按钮有帮助,但我需要自动化(可能应该提到这一点)。我需要有一个触发按钮/操作或自动执行此操作的计划刷新。
0赞 horseyride 11/15/2023
如果您关闭文件并加载它,则右键单击(或使用VBA或打开时自动刷新)刷新输出,则其自动
0赞 Robert Eldridge 11/15/2023
@horseyride - 你是对的,这确实有助于我的自动化问题。但是,此方法不会附加任何数据,只会覆盖所有内容。我也许能够做到这一点,但我宁愿有一个全面的解决方案并将其用作备份。
0赞 horseyride 11/15/2023
你是对的。PowerQuery不执行追加。您必须通过存储旧数据来伪造它
0赞 Sam Nseir 11/15/2023 #2

此答案也使用 Power Query,与上一个答案非常相似,但此答案仅将新行追加到主表,同时保留具有数据输入的任何其他列。

Power Query 中的查询:

查询 加载到 ...
tbl项目 仅连接
tbl任务 仅连接
tblMain 现有 仅连接
tblMain 桌子

查询 , , - 很简单,可以拉入工作表中的相应表格。tblProjecttblTasktblMain Existing

查询是完成所有工作的工作,也是作为表加载的查询。 从工作表中加载到同一个表中。步骤:tblMaintblMain ExistingtblMain

  • 参考tblProject
  • 左 Anti(仅在第一行中)与 on 合并。这样一来,您就只剩下自上次刷新以来添加的新项目。tblMain ExistingProjectID
  • 删除合并列
  • 添加新的列引用(与上一个答案相同)TaskstblTask
  • 展开任务
  • 追加上一步tblMain - Existing
    = Table.Combine({#"tblMain Existing", #"Expanded Tasks"})

我创建了一个示例电子表格:https://1drv.ms/x/s!AtpcKzRsDrY1o7Vk6bgpWE8AH7wTqw?e=umWQ8x

评论

0赞 Sam Nseir 11/23/2023
这回答了你的问题吗?