Excel程式: 特定條件中加起總和

2012-02-17 5:30 pm
於一份同事扣假報告表中,每一個同事的記錄為一個橫行。

在其中一位同事的橫行E8至AH8中:
有2個寫著"E 25/2" (代表與二月廿五日互相調假)
有2個寫著"C 22/6" (代表由於六月廿二日的工作而補假一天)
有3個寫著"A 1.0" (代表放有薪年假一天)

程式要求:
把所有有薪年假加起來。

若程式對於橫行中所輸入的數值會有特別要求,請特別註明。

事實上,本人希望此程式能做到:
由於這是扣假報表, 所以絕對有可能寫入任何文字或日期, 我希望它只對"A " 字開頭, 而後面數值的cells作加數。例如:"C 3/12"、"E 25/2"、"E 18/2"等等,都不應該影響到運算結果。有時同事只請半日假, 我司會只扣他們半天, 即"A 0.5", 在運算時要能夠計算出有小數點至最多兩個位。有時會由於特別情況而輸入文字, 希望算式不會受此影響。
更新1:

何人說,我試過用你的算式,把它輸入成array再試算,可是不成功,答案始終為"#value!"。本人的是Window7, Excel 2010。未知會否有關。並請問為何我會得不到你所得的答案?

回答 (2)

2012-02-17 7:44 pm
✔ 最佳答案
Function 想要寫得簡單,我們必須要為你輸入的東西加點限制。

1. 有薪年假的格式,必須為「A + space + 0.0 」這樣的格式,一共是五個位的字串,如果你要加 remarks 的話,你必須加在後面,例如:「A 2.5 去旅行」
2. 其他所有儲存格都不要用「A + space」來開頭,即是你可以用「Absent 」「Apple」,但最好不要打「A cup of tea」。

Function 如下:

=SUM(IF(LEFT(E8:AH8,2)="A ",VALUE(MID(E8:AH8,3,3)),0))

** 此乃 Array Function,完成輸入之後要按「Ctrl + Shift + Enter」,成功的話 Formula Bar 會顯示用大括號 { } 圍著 function。[如下圖]
** 注意 ="A " <--A 後面是有一個 space 的。


圖片參考:http://imgcld.yimg.com/8/n/HA00878676/o/701202170123413873437980.jpg

圖例中我只用了 E1 到 J1,加總的答案在 K1。



非常簡單的解釋一下:
1. 首先是裡面的 IF function。
- LEFT(E8,2)="A ",就是 cell E8 的字串,頭兩位要等於「A + space」;
- MID(E8,3,3) 就是從 cell E8 的字串中,由第三位開始,取出三個字,就是第 3 至 5 位的字了,也就是日數,0.0。
- 因為 MID function 傳回的是字串,不能相加,所以要再轉成數值,用 VALUE function。
- 後面的零意思就是如果條件不乎,IF 運算式傳回 0 。

2. 然後我們用一個 SUM 把所有 IF 傳回的結果加起來。就是你的答案了。


2012-02-17 13:18:32 補充:
Formula 的除錯,亦是引人入勝之事。

首先,那個 #Value 是什麼意思呢?#Value 是 Excel 裡面的其中一個個錯誤。一般來說,就是你用數字的運算式,來運算文字。
例如 := 1 + "A" 就會出現 #Value 了。

在我給你的 Array Function,一般來說 SUM、LEFT、IF、MID,都不太會傳回 #Value 了。最大的可能性,就是 VALUE function 了。它的用途是把字串,變回數值。
例如:= VALUE("1.1") ,就會傳回 1.1。如果是= VALUE("1.a") 呢?這就會出問題,而傳回 #Value 了。

字數不夠,後續.

2012-02-17 13:24:46 補充:
這就是我跟你說的限制 2 了。

Cell A1 = 「A 2.5」
Cell A2 = 「A 1.0 上大學」
Cell A3 = 「A Cup of Tea」

那個 IF function 的傳回值,是 VALUE(MID(E8:AH8,3,3)),看看拿它運算我上面的例子會如何?
VALUE(MID(A1,3,3)) = 2.5
VALUE(MID(A2,3,3)) = 1.0
VALUE(MID(A3,3,3)) = #Value!

所以我才會說,其它的 cell 都不要用「A + space」來開頭,不然就會有錯誤了。

字數不夠,後續.

2012-02-17 13:27:15 補充:
Excel 內建了一個功能,叫 evaluate formula。你先點選有 #value 的儲存格,然後打開 evaluate formula,然後一步一步的按 evaluate 鍵,你就可以找到首先出現 #value 的地方,再修改你的 data,又或者 formula 了。
2012-02-17 11:48 pm
好奇一問… 其實你只對A字開頭的計算,咁點解唔免去A字,直接打數字﹖如果係咁就唔需要用陣列公式,用普通公式就可以了,咁你個#VALUE問題應該可解決。如果堅持顯示A字,亦可在自訂格式中設定,又能顯示A字,亦不影響公式。

何兄條陣列公式我試過,是成功的。共勉~ ^^


收錄日期: 2021-04-21 15:03:00
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20120217000051KK01234

檢視 Wayback Machine 備份