目前有部分企業、工廠采用現金發放的方式發工資,而對於財務人員來說預估各種面額的鈔票張數則成了必不可少的程序,對於大部分不懂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))