根据溢出范围内的两个数据集创建笛卡尔积的公式

Dar*_*ook 2 worksheet-function microsoft-excel

我正在寻找一个公式,该公式将根据两组数据创建笛卡尔积,其中任意一组数据都可以增长或缩小。

@ScottCraner 在这篇文章中给出的答案几乎给了我答案,只是它没有按预期溢出。
Excel - 将 a 列和 b 列组合成 d 列和 e 列

我不是在寻找 PowerQuery 或 VBA 解决方案 - PQ 涉及信任员工按下Refresh,VBA 涉及信任员工注意到“启用宏”的黄色条并理解其含义。

测试数据: 在此输入图像描述

在上图中,我尝试M:N使用 columns 中的数据获取 columns 中的值A:F
目前我正在获取 中的值J:K

  • 我的原始数据的精简版本位于D表中的列中,想象中称为Table1
  • F1包含=SEQUENCE(EndDate-StartDate+1,,StartDate)给我提供开始和结束之间所有日期的列表的公式。
  • G1包含公式=UNIQUE(Table1[Process])
  • I1包含公式=SEQUENCE(COUNTA($F$1#)*COUNTA(G1#)),该公式将向下溢出以给出最终表中的行数(即我需要溢出多少)。
  • J1包含公式=IF(I1#<>"",INDEX($F$1#,INT(ROW()-1)/COUNTA($G$1#)+1)).
    Index部分本身将向下拖动并给出 column 中的值M,或者我可以选择范围并使用数组公式也给出值。
    如果我评估单元格中的公式,J4它应该引用单元格F2....并且确实如此,但随后返回单元格的值F1
    在此输入图像描述

我有一种感觉,我错过了一些关于溢出范围的基本知识。有任何想法吗?

Sco*_*ner 5

使用 Let 和 CHOOSE,我们可以将所有步骤合并到一个公式中以输出两列:

=LET(rng,Table1[Process],
    strt,A2,
    end,B2,
    unq,UNIQUE(rng),
    dt,SEQUENCE(end-strt+1,,strt),
    cntP,COUNTA(unq),
    cntD,COUNT(dt),
    lstP,INDEX(unq,INT(SEQUENCE(cntP*cntD,,1,1/cntD))),
    lstD,INDEX(dt,MOD(SEQUENCE(cntP*cntD,,0),cntD)+1),
    CHOOSE({1,2},lstP,lstD))
Run Code Online (Sandbox Code Playgroud)

基本上都是按照你的步骤来的。

  1. 我们从表中得到了独特的。
  2. 我们使用序列获取日期范围。
  3. 我们对两个列表进行计数并存储它们。
  4. 使用 INT() 我们得到一个数字数组,这些数字是重复日期的计数,其中重复的次数是唯一的,因此对数字进行了排序。这传递到索引
  5. 日期也一样,但数字是连续的。
  6. 然后通过“选择”,我们将它们并排放置,这样它们就会溢出。

在此输入图像描述

  • 用布朗博士的话说……“伟大的斯科特!” 这刚刚表明我的公司最近更新了 Excel,我现在得到了“LET”!!!!! 作为一个明确的奖励,它回答了这个问题。干杯。:) (2认同)