Google Sheets 数组公式问题

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

此公式的目标是获取起始余额并使用预定值的排序列表对其进行细分。唯一的问题是,三个最大值只能使用一次,而较小的值可以根据需要多次使用,以最短的步骤将余额减少到零。

该表可以在这里找到。

B 列包含余额可以减少的预定值(从小到大排序) C 列显示起始余额(通过复选框随机化),然后显示删除值后的运行余额。 D 列应该是运行余额减少的值的递减列表。

数组公式在 D2 中,如下所示; =ArrayFormula(IF(C2:C25>=0,IF(C2:C25>=$B$11,IF(COUNTIF(D$2:D2, $B$11)=0, $B$11,IF(C2:C25>= $B$10,IF(COUNTIF(D$2:D2, $B$10)=0, $B$10,IF(C2:C25>=$B$9, IF(COUNTIF(D$2:D2, $B$9)=0 , $B$9, IF(C2:C25>0,INDEX($B$2:$B$8, MATCH(C2, $B$2:$B$8, 1),0))))))))))

您可以使用复选框来播种新的随机数。

当起始余额大于预定列表中的最大值(250 美元)时,该公式将生成结果,但其他所有值均返回 FALSE。

任何帮助将不胜感激。

if-statement google-sheets nested array-formulas index-match
1个回答
0
投票

您可以选择:

作为第一步,我更改了你的第一个公式

=RANDBETWEEN(1,50000)/100
,这样你就可以获得一些小数。

对于公式,我嵌套了两个 REDUCE 函数,一个用于仅需要抓取一次的前三个值,然后用于其他值:

=LET(bigger,REDUCE("Decrease by",SORT(B9:B11,1,0),LAMBDA(a,v,IF(v<=(C2-IFERROR(SUM(a))),VSTACK(a,v),a))),
REDUCE(bigger,SORT(B2:B8,1,0),LAMBDA(a,v,IF(v=0,{a;0},IF(v<=(C2-IFERROR(SUM(a))),VSTACK(a,INDEX(IF(SEQUENCE(ROUNDDOWN((C2-IFERROR(SUM(a)))/v)),v))),a)))))

首先,我检查该值是否小于先前值的累积和,表示为 C2 - “a”中的值的总和。如果它更小,那么它会叠加该值。

有了三个较大值的列表,然后我再次使用 REDUCE,但首先我检查 v=0,所以它在那时停止。然后它获取每个值并检查它是否小于累积和,但这一次它会堆叠累积和可以除以它的所有次数。我用 SEQUENCE 部分来做,并用“v”代替实际序列

INDEX(IF(SEQUENCE(ROUNDDOWN((C2-IFERROR(SUM(a)))/v)),v)))
.

最后一个“a”是跳过小于累计和的值

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