跨多列溢出范围求和,使用溢出公式将前 x 和组保留在一起

问题描述 投票:0回答:1

所有,我的目标是获得溢出公式的摘要输出,该公式生成前 x 行,但最后一行对所有其他行进行分组,以便总数将与数据源相关联。 (第一张图显示了它的工作原理,第二张图显示了我想要的效果。包含用于测试的 Markdown 表格。)如果有更好的方式来表达标题,请告诉我,我会进行调整。

源表是通过针对数据透视表的溢出公式生成的。我这样做是为了在开始组合字段之前获得我想要关联的总数,而数据透视表没有一个干净的解决方案(要对前 x 个字段进行分组,您需要手动选择它们,但我需要它是动态的)。

图中,第一个表(左侧)都是溢出公式。生成顶部的部门编号和侧面下方的 ID,以及值。

第二个表试图取前5名,然后将前5名之后的所有内容汇总到“其他”中;然而,正如您所看到的,这是获取 ID 6 的数据,而不是大于 6 的所有数据。我尝试了几种方法,但无法让它在执行此操作的同时立即对所有列求和。一种解决方案要求我复制附加列的公式,或者在数量较少时将其删除,因为这不是静态的。

该公式适用于除“其他”行之外的所有内容:

=MAKEARRAY( ROWS(I2#), COLUMNS(K1#), LAMBDA(r,c,SUM(C2#*--(A2#=INDEX(I2#,r))*--(C1#=INDEX(K1#,1,c)) )))

我尝试将 K2 中的公式修改为以下,但结果是#N/A:

=MAKEARRAY( ROWS(I2#), COLUMNS(K1#), LAMBDA(r,c,SUM(C2#*--IF(I2#>5,(A2#>=INDEX(I2#,r)),(A2#=INDEX(I2#,r)))*--(C1#=INDEX(K1#,1,c)) )))

enter image description here

这是所需的输出:

enter image description here

(用于测试的Markdown)

ID/部门 姓名 1 2 3 4 5
1 汤姆 2.00 3.25 4.50 5.75 7.00
2 2.75 4.00 5.25 6.50 7.75
3 克里斯汀 3.50 4.75 6.00 7.25 8.50
4 马克 4.25 5.50 6.75 8.00 9.25
5 5.00 6.25 7.50 8.75 10.00
6 5.75 7.00 8.25 9.50 10.75
7 凯里 6.50 7.75 9.00 10.25 11.50
8 杰克 7.25 8.50 9.75 11.00 12.25
9 玫瑰 8.00 9.25 10.50 11.75 13.00
10 米歇尔 8.75 10.00 11.25 12.50 13.75
11 迈克尔 9.50 10.75 12.00 13.25 14.50
12 保罗 10.25 11.50 12.75 14.00 15.25
13 何塞 11.00 12.25 13.50 14.75 16.00
14 珊达 11.75 13.00 14.25 15.50 16.75
15 埃里克 12.50 13.75 15.00 16.25 17.50

这是一个帮助我创建第一个公式的问题

excel excel-formula
1个回答
0
投票

您也可以尝试使用以下内容,以及

VSTACK()
+
TAKE()
+
BYCOL()/MMULT()
的组合:

enter image description here


=VSTACK(
    A1:G1,
    TAKE(A2:G16, 5),
    HSTACK(
        6,
        "Others",
        BYCOL(
            DROP(A2:G16, 5, 2),
            LAMBDA(x, SUM(x))
        )
    )
)

或者,使用

MMULT()

=VSTACK(
    A1:G1,
    TAKE(A2:G16, 5),
    HSTACK(
        6,
        "Others",
        MMULT(
            SEQUENCE(
                ,
                ROWS(A2:G16) -
                    5
            ) ^ 0,
            DROP(A2:G16, 5, 2)
        )
    )
)

或者,建议使用

Structured References
,即
Tables
,这是比以下更好的选择,但是,公式替代方案以A列为基础并将其用作
lastRow
的参考。但我的钱在
Tables
,我永远不会选择以下,这只是一个替代方案。

=LET(
     _LastRow, MATCH(2,1/(A:A<>"")),
     _Data, A1:INDEX(A:G, _LastRow, ),
     VSTACK(TAKE(_Data,6), HSTACK(6, "Others", BYCOL(DROP(_Data,6,2), LAMBDA(x,SUM(x))))))

© www.soinside.com 2019 - 2024. All rights reserved.