获取美元数额范围内的账单数量 – 级联较大的账单

我正在build立一个信封系统,在这个系统里我可以提取每个支付期的一些账单,并把它们放入信封里。 我想要做的是通过公式确定每个我需要有多less票据。 这是一个例子:

我的资金将是:

Kids $ 10 Car $ 50 Gas $100 Groceries $225 Gifts $ 40 --------------- Total: $425 

我想要的是一个基本的公式提取每个$ 1,$ 5,$ 10,$ 20和$ 50

如何从这个清单中提取50美元的数字,应该给我7 [1汽车,2汽油,4食品杂货]?

最终的目标应该是这样的:

 0 $ 1 bills $ 0 1 $ 5 bills $ 5 1 $10 bills $ 10 3 $20 bills $ 60 7 $50 bills $350 -------------------- Total Cash: $425 

UNTESTED。 在A2和50,20,10,5,1中的C1:G1,然后可能在C2中,并复制:

 =INT(MIN($B2,$B2-SUMPRODUCT($B$1:B$1*$B2:B2))/C$1) 

然后可以按列(不包括标签)求和结果以获得按面额计数,并且每个总和乘以列标签(例如=SUM(C2:C10)*C$1 ),然后将总和作为交叉检查总数。

假设你的表格在A2:B6范围内,我会在右边使用一些辅助单元格,如下所示:

 | A | B | C | D | E | F | G | 50 20 10 5 1 Kids 10 0 0 1 0 0 Car 50 1 0 0 0 0 Gas 100 2 0 0 0 0 Groceries 225 4 1 0 1 0 Gifts 40 0 2 0 0 0 

这是第2行的公式:

 C2: =ROUNDDOWN(B2/C$1,0) D2: =ROUNDDOWN((B2-C2*C$1)/D$1,0) E2: =ROUNDDOWN((B2-C2*C$1-D2*D$1)/E$1,0) F2: =ROUNDDOWN((B2-C2*C$1-D2*D$1-E2*E$1)/F$1,0) G2: =ROUNDDOWN((B2-C2*C$1-D2*D$1-E2*E$1-F2*F$1)/G$1,0) 

这些公式可能会更简单一些,如果您使用更多的辅助列与中间结果。

然后将它们复制到下面的行。 最后,您可以使用每个辅助帐单列的简单SUM得到结果,并将它们放在您喜欢的位置,然后将这些结果乘以另一列中的帐单值。

一种可能的方法是执行以下algorithm:

在你的例子中,我们有(a,b,c,d,e,f)=(10,50,100,225,40)作为我们的一组值。 对于每个值run =ROUNDDOWN(a/50,0)=ROUNDDOWN(b/50,0) ,等等在与您的值列相邻的列中。

接下来,将这些值乘以除数(本例中为50),并从初始量中减去此值。

现在再次运行10,5和1的循环。也就是说,在除数组(50,10,5,1)上运行。 每个除数值需要三列,一个用于初始使用= ROUNDDOWN(),一个用于乘法,另一个用于减法。 总共你需要12栏信息。

可能有一种方法可以在VBA中实现这个function,它可以轻松地将每个账单types分成三列。