我需要通过 Excel 365 公式(不是 VBA,不是 Power Query)获取两个“集合”的笛卡尔积。例如,我的两个集合是两个左侧表,预期的笛卡尔积是右侧表:
Excel 365 中两个集合的笛卡尔积
如何使用一个 Excel 公式获取笛卡尔积?
如果可能的话,我想要一个通用的答案,适用于任意两个集合,无论它们包含什么值,无论这两个集合中的列数是多少。
两组:
列 1 | 第 2 列 | 列 1 | 第 2 列 | |
---|---|---|---|---|
4500005010 | 一个 | 采购订单开始 | 德 | |
4500005011 | 乙 | 标题合并 | 埃 | |
4500005012 | 碳 | PO 激活 | F |
一个通用的选择可能是:
CROSSJOIN
名称管理器中定义的自定义函数在哪里:来源:https ://stackoverflow.com/a/78244826/22459970
如果您还想要处理标题行的选项,
CROSSJOIN
可以定义如下:可选的[headers]参数的行为方式与 的[field_headers]参数类似
GROUPBY
,其中接受以下选项:例如:
或者:
请注意,换行符和空格/缩进是为了提高可读性而使用的。在名称管理器中定义函数时可以删除它们。
有一个基于的解决方案
MAKEARRAY
:不使用
LAMBDA()
辅助函数:• 或者,选项二:
最后改变变量来评估:
笛卡尔积
TOCOL/IF/序列
效率
INT/MOD
组合更高效的情况。不是在使用它们本身时(没有明显的区别),而是与其他功能结合使用时。INT/MOD
Mayukh Bhattacharya 的解决方案(使用 的那个很不错c, SEQUENCE(a*b),
)花费了 14 秒。您的MAKEARRAY
解决方案花费了 23 秒。如果/序列
OneDrive
。