如何根据每个项目的最后一个值求一组项目值的总和?

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

在Excel中,我有一个表,其中包含多组项目中不同项目的历史价值数据。当输入新项目的记录时,必须放弃该项目的旧值,并且必须根据新项目的值重新计算组中项目的总价值。在每个组中,根据指定的组名称和日期,仅包含每个项目的最后一条记录;每个项目的最后日期都小于指定日期。我想根据组名称和特定日期查找每个组中项目值的总和,我该怎么做?

enter image description here

如图所示,数据分为两组,G1 和 G2,...在每一行中,我需要计算截至该日期已输入的相应组中项目的总价值。在表格的右侧,我根据“日期”和“组”字段过滤了所需的记录,然后输出将是绿框中显示的值的总和。 在日期 D3,作为项目 i11 输入的新值,根据该新值重新计算组总计值。同样在表格中,每行中每个组的总值显示在[组总和]列中,最后两列也通过公式显示。

数据:

团体 项目 日期 价值 组的总和
1 G1 i11 D1 10 30
2 G1 i12 D1 20 30
3 G1 i13 D2 30 60
4 G1 i11 D3 40 90
5 G1 i14 D4 50 140
6 G1 i13 D5 60 170
7 G1 i13 D6 70 190
8 G1 i13 D6 80 190
9 G1 i12 D7 90 260
10 G1 i14 D8 100 310
11 G2 i21 D8 110 110
12 G1 i13 D9 120 350
13 G2 i22 D9 130 270
14 G2 i21 D9 140 270
filter excel-formula group-by sum excel-2010
1个回答
0
投票

您标记了 Excel 2010。

我设法在 Office 365 中找到解决方案:

=LET(f,FILTER(HSTACK([Item],ROW([Item])-1),([Group]=[@Group])*([Date]<=[@Date])),
     i,TAKE(f,,1),
     r,DROP(f,,1),
SUM(INDEX([Value],FILTER(r,MMULT((TOROW(i)=i)*(TOROW(r)>=r),SEQUENCE(ROWS(f))^0)=1))))

该公式首先过滤同一组、相同日期或更小的所有项目

i
- 连同其行引用(负 1),因为表格从第 2 行开始,即第一行,因此
ROW(2)-1
= 1 )
r

MMULT 用于检查过滤结果中是否存在重复项。仅最后找到的

i
项目返回为 TRUE。

这用作 FILTER 条件,以删除先前的重复项并仅返回最后找到的

i
值的行号。

这些行号用于 INDEXed

Item
列,并且这些返回值经过求和。


或者当您使用 Beta Chanel Insiders 时:

=LET(f,FILTER(HSTACK(Table2[Item],ROW(Table2[Item])),(Table2[Group]=Table2[@Group])*(Table2[Date]<=Table2[@Date])),SUM(INDEX(E:E,DROP(GROUPBY(TAKE(f,,1),DROP(f,,1),MAX,,0),,1))))

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