代码之家  ›  专栏  ›  技术社区  ›  SoftTimur

使用动态数组公式转换和筛选表

  •  0
  • SoftTimur  · 技术社区  · 3 年前

    (*这个问题更进一步 this question . *)

    我在左边有下表,其中有几行和几列作为输入。

    我想按公式在右边找一张表。

    理想情况下,我在J3、K3和L3中寻找一个或多个动态数组公式,它们以D3:G3、C4:C6和D4:G6(或C3:G6)为自变量。

    具有LAMBDA功能的解决方案将是第二好的(尽管您仍然可以提出一个),因为并不是每个人都在使用beta通道。

    有人能帮忙吗?

    enter image description here

    0 回复  |  直到 3 年前
        1
  •  3
  •   P.b    3 年前

    =LET(x,ROWS(A2:A4),y,COLUMNS(B1:E1),z,SEQUENCE(x*y)-1,CHOOSE({1,2,3},INDEX(B1:E1,1+MOD(z,y)),INDEX(A2:A4,1+INT(z/y)),INDEX(B2:E4,1+INT(z/y),1+MOD(z,y))))

    感谢乔斯·伍利做了所有的前期工作。

    和过滤掉空值和没有值的行,可以使用:

    =LET(x,ROWS(A2:A4),y,COLUMNS(B1:E1),z,SEQUENCE(x*y)-1,a,INDEX(B2:E4,1+INT(z/y),1+MOD(z,y)),b,CHOOSE({1,2,3},INDEX(B1:E1,1+MOD(z,y)),INDEX(A2:A4,1+INT(z/y)),IF(a="","",a)),FILTER(b,INDEX(b,,3)<>""))

    enter image description here

        2
  •  1
  •   Jos Woolley    3 年前

    这次的方法略有不同:

    =LET(x,SMALL(IF(D4:G6<>"",10^5*SEQUENCE(ROWS(D4:G6))+SEQUENCE(,COLUMNS(D4:G6))),SEQUENCE(COUNT(D4:G6))),y,INT(x/10^5),z,MOD(x,10^5),CHOOSE({1,2,3},INDEX(D3:G3,z),INDEX(C4:C6,y),INDEX(D4:G6,y,z)))

    然而,最有可能的是可以改进。

    编辑 笔记 :在您的示例中,中的非空白条目 D4:G6 都是数字。如果情况并非总是如此,则更换 COUNT(D4:G6) 具有 COUNTIF(D4:G6,"<>") 以获得更通用的设置。