目前有部分企业、工厂采用现金发放的方式发工资,而对于财务人员来说预估各种面额的钞票张数则成了必不可少的程序,对于大部分不懂VBA和函数的人员同时也是一个难点。
实事上ET2009的数组公式可以轻松解决这个问题,只需要几秒钟,借用一个数组公式就可以完成所有人员的所需钞票数量。现具体演示一下需求与完成步骤。
假设需要计算的面额包括100元、50元、20元、10元、5元、2元、1元(如果需在角与分也用同一个公式,思路上没有分别),那么在工资存放列(假设为B列)右边建立7列做为辅助区,用于存放每种面额的钞票张数。
1.在C1:I1区域分别输入100、50、20、10、5、2、1;
2.选择C1:I1区域,再单击右键,选择“设置单元格格式”菜单;
3.在“数字”选项卡的“分类”中选择“自定义”;
4.右边的“类型”框中显示了“G/通用格式”,将其修改为“G/
图一 自定义数字格式
5.在C2单元格录入以下公式:=IF(COLUMN()=3,INT($B2/C$1),INT(($B2-SUM(OFFSET($B$1,ROWS(A$1:A1),1,1,COLUMNS($B:B)-1)*OFFSET($B$1,,1,1,COLUMNS($B:B)-1)))/C$1))
录入公式后需要同时按下“Ctrl+Shift+Enter”三键结束,表示按照数组公式计算,否则无法产生正确结果。
6.选择单元格C1,将公式向右填充至I2,再双击填充柄,将C2:I2的公式向下填充至末尾。公式的计算结果见图二所示:
图二 利用数组公式计算钞票张数
7.为了验证计算是否准确,再在J列建立一个辅助区,用于汇总所有面额与数量的乘积。在J1输入“汇总”,在J2输入以下公式:=SUM($C$1:$I$1*C2:I2)
仍然以“Ctrl+Shift+Enter”三键结束,否则无法产生正确结果。
8.双击J2单元格的填充柄,将公式向下填充到最末单元格。
9.根据J列的汇总值与B列的工资进行比较,可以清晰分辨公式的正确性。见图三所示:
图三 验证公式的准确性
公式思路解释:
计算100元面额的钞票数量时最简单,将工资除以100,然后利用INT函数取整即可,即公式中“INT($B2/C$1)”部分;
而计算其它面值的钞票张数时,只需要对剩下的部分工资进行计算。而如何确定已经计算过的钞票面额的值是重点。本例中利用“OFFSET($B$1,,1,1,COLUMNS($B:B)-1))”获取已经计算过的钞票面额,再用“OFFSET($B$1,ROWS(A$1:A1),1,1,COLUMNS($B:B)-1)”获取已计算过的钞票对应的数量,两者乘积并汇总,再总薪资求差即为剩下的待计算金额。
而“两个区域乘积并汇总”在ET中有一个专用函数——MMULT,所以本例公式可以改为“=IF(COLUMN()=3,INT($B2/C$1),INT(($B2-MMULT(OFFSET($B$1,ROWS(A$1:A1),1,1,COLUMNS($B:B)-1)
,TRANSPOSE(OFFSET($B$1,,1,1,COLUMNS($B:B)-1))))/C$1))”
根据前面的分析,计算100元钞票的数量和其它面值的数量使用了不同的公式。为了让两者统一,即仅使用一个公式完成,通过IF函数将两段公式结合即可,使公式在第3列是按前一种方式计算,列号大于3时则按另一种方式计算。
最后补充一点,如果用同类软件EXCEL解决此问题,可以改用以下普通公式完成:
=IF(COLUMN()=3,INT($B2/C$1),INT(($B2-SUMPRODUCT(B2:$C2*B$1:$C$1))/C$1))