从美元金额范围中获取账单数量 - 级联更大到更小的账单

时间:2014-12-12 14:56:12

标签: excel integer excel-formula rounding worksheet-function

我正在建立一个信封系统,我在每个支付期间提取一些账单并将它们放入信封中。我想要做的是通过公式确定每个我需要多少账单。这是一个例子: -

我的资金将是:

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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获取结果,根据需要放置它们,并将这些结果乘以另一列中的帐单值。

答案 2 :(得分:0)

一种可能的方法是实现以下算法:

在您的示例中,我们将(a,b,c,d,e,f)=(10,50,100,225,40)作为我们的值集。对于与您的值列相邻的列中的每个值=ROUNDDOWN(a/50,0)=ROUNDDOWN(b/50,0)等运行。

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

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

可能有一种方法可以在VBA中实现这一点,将其简化为每个帐单类型所需的三列计数。