在Excel 365中,是否可以处理一行付款数据以仅对该行中合格的付款求和,最好无需VBA或宏?

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

我正在使用 Windows 10 和 MS 365 中的 Excel 订阅版本。

问题:我使用数据透视表汇总了数千笔应付账款交易,以显示一年中向每个供应商支付的款项。该表以供应商 ID/名称为键,向每个供应商支付的款项位于供应商 ID/名称后面的一行中。每笔供应商付款均按付款代码进行分类,该代码确定付款是否“有资格”向 IRS 报告。表的列标题是付款代码。每个供应商可能有不同代码下的多次付款。每个支付代码被设置为合格代码或不合格代码,这被记录在单独的查找表中。该查找表可能会经常更新。

期望的结果:我正在尝试开发一个公式,该公式将处理每一行付款数据,并仅对查找表中“合格”代码的列中的付款进行求和。以下是两个表格的屏幕截图,其中包含示例付款和付款代码以及生成的总付款和所需的合格付款总额。我正在使用的实际数据集约为 900 行 x 56 列。

我正在尝试开发一个不使用 VBA 或宏的单一公式来填写“合格付款总额”列。不确定这是否可能。 我正在尝试使用 lambdascanreducebycolbyrowlet 函数来开发公式。除了 let 之外,所有这些函数对我来说都是全新的。我已经完成了拼图的各个部分,但距离最终解决方案还差得很远。

这些公式产生小的增量结果。它们可能是更大拼图的碎片。

=BYROW(ALL_DATA,LAMBDA(row,SUM(row)))

=LET(RESULT,SCAN(0,B3:BB3,LAMBDA(a,v,a+v)),INDEX(RESULT,1,COLUMNS(RESULT)))

=LET(RESULT,REDUCE(0,B3:BB3,LAMBDA(a,v,a+v)),RESULT)

下面的公式是根据 David Leal 在 2022 年 11 月针对另一个最初与我的问题类似的问题发布的解决方案进行修改的。这个公式不能正确执行,我认为从现在开始解决我的问题还有很长的路要走。

=LET(set, B3:BB25, m, ROWS(set), seq, SEQUENCE(1,m,3),CUMULATE, LAMBDA(x, SCAN(0, x, LAMBDA(acc,item, acc+item))),REDUCE(0,seq, LAMBDA(acc,idx, IF(idx = 1,CUMULATE(INDEX(set,idx)),VSTACK(acc, CUMULATE(INDEX(set,idx)))))))

excel-formula dynamic conditional-statements iteration lookup-tables
1个回答
0
投票

您可以使用这个公式:

=LET(qc,FILTER(PaymentCodes[Code],PaymentCodes[Qualified]="yes"),
     SUM(FILTER(PayablesTransaction[@[100]:[180]],
                ISNUMBER(MATCH(PayablesTransaction[[#Headers],[100]:[180]],TEXT(qc,"0"),0)))))

首先过滤符合条件的代码。

并将这些值作为标题行的条件 --> 返回每行的有效值。

由于标题行仅为文本,因此代码也必须迁移到文本才能作为标准。

在表格内您不能使用溢出公式!

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