我在 Excel 中建立了一個時間表來追蹤我的工作時間。一切都很好,但我有一個小問題。
我的工作表具有以下佈局(In
=開始工作,Out
=停止工作):
A | B | C | D | E | F | G
-----------+-------+-------+-------+-------+-------+------
Date | In | Out | In | Out | In | Out
01.03.2014 | | | | | | (weekend)
02.03.2014 | | | | | | (weekend)
03.03.2014 | 08:00 | 12:00 | 12:45 | 17:00 | |
04.03.2014 | 08:45 | 13:30 | 13:45 | 17:45 | |
05.03.2014 | 08:15 | 12:30 | 13:00 | 18:00 | |
06.03.2014 | 08:00 | 12:30 | 13:00 | 17:30 | |
...
現在我想計算一下我每天工作的時間。這很容易:
= SUM($C2; $E2; $G2) - SUM($B2; $D2; $F2)
如果我有時不吃午餐,這甚至會起作用:
A | B | C | D | E | F | G
-----------+-------+-------+-------+-------+-------+------
Date | In | Out | In | Out | In | Out
01.03.2014 | | | | | | (weekend)
02.03.2014 | | | | | | (weekend)
03.03.2014 | 08:00 | 12:00 | 12:45 | 17:00 | |
04.03.2014 | 08:45 | | | 17:45 | |
05.03.2014 | 08:15 | 12:30 | 13:00 | 18:00 | |
06.03.2014 | 08:00 | 12:30 | 13:00 | 17:30 | |
...
但白天輸入開始工作時間( )時不起作用In
,但尚未輸入停止工作時間(Out
):
A | B | C | D | E | F | G
-----------+-------+-------+-------+-------+-------+------
Date | In | Out | In | Out | In | Out
01.03.2014 | | | | | | (weekend)
02.03.2014 | | | | | | (weekend)
03.03.2014 | 08:00 | 12:00 | 12:45 | 17:00 | |
04.03.2014 | 08:45 | | | 17:45 | |
05.03.2014 | 08:15 | 12:30 | 13:00 | 18:00 | |
06.03.2014 | 08:00 | 12:30 | 13:00 | | |
...
因為06.03.2014
這會導致負時間。
我想要的是我早上實際工作的時間,04:30
即06.03.2014
。這意味著,我只需將那些相鄰列不為空的列包含到第二個(負)總和中。我怎麼能以通用的方式做到這一點,同時仍然支援跳過午餐時間?我所說的「一般方式」是指一個公式,它也適用於 F、G 列,也可能適用於 H、I 列……所以它不應該是一個冗長的IF
語句公式。
我想使用SUMIF
orSUMIFS
函數,但據我了解,它只接受類似 的範圍B1:G1
,但不接受類似 的範圍B1;D1;F1
,即跳過每隔一列。我不知道如何做到這一點,因為我根本不是 Excel 專家...這是我到目前為止所嘗試的,但它不起作用,它只給了我#VALUE
:
= SUM($C2; $E2; $G2) - SUMIF(($C2; $E2; $G2); "<>"; ($B2; $D2; $F2))
這應該意味著:如果 C、E 和 G 中的對應單元格不為空,則對 C、E 和 G 求和並減去 B、D 和 F 的總和。然而,範圍周圍的括號似乎不起作用。或是問題是別的什麼?
答案1
我從 Madball 的方法中獲得了一些靈感,但不需要額外的一行。將其用於向下複製的第 2 行
=C2+E2+G2-B2-D2-F2+MOD(COUNT(B2:G2),2)*MAX(B2:G2)
它根據需要添加/減去時間,但添加後退插入奇數次時的最新時間(因此忽略它)。
答案2
這就是我要做的事。如果插入更多列,則可以輕鬆調整公式:
- 在第一行增加一系列 1,-1,1,-1... 這樣做是為了讓我們知道它是加法還是減法。
- 在最右邊(範例中的 H),使用下列公式:
=IF(ISODD(COUNT(B3:G3)),SUMPRODUCT($B$1:$G$1,B3:G3)+MAX(B3:G3),SUMPRODUCT($B$1:$G$1,B3:G3))
這在您的範例中適用於每種情況(除了奇怪的事情,例如連續離開兩次):
說明:SUMPRODUCT 將陣列中的每個單元格與另一個陣列中的對應單元格相乘,然後將它們全部加在一起。因此,在 3/6 上,它會執行 8*-1+12:30*1+13:00*-1+17:30*1+0*-1+0*1。
如果有奇數個進/出/,它會加回最後(最高)的次數來抵消它。
答案3
我不確定我完全理解你的問題,但這可行
我使用了一個簡單的 if 語句
=SUM(IF(C2<>"",C2-B2,0),IF(E2<>"",E2-D2,0))
這甚至可以完成部分天的工作(例如第 4 行只工作了一個下午)。
如果您要新增第三組輸入/輸出,請根據
=SUM(IF(C2<>"",C2-B2,0),IF(E2<>"",E2-D2,0),IF(G2<>"",G2-F2,0))
答案4
你嘗試替換這個怎麼樣:
= SUM($C2; $E2; $G2)
有了這個:
= SUM(IF($C2="";TEXT(NOW(); "hh:mm");$C2); IF($E2="";TEXT(NOW(); "hh:mm");$E2); IF($G2="";TEXT(NOW(); "hh:mm");$G2))
此公式應將當前時間放入空白單元格($C2、$E2、$G2)中,這將為您提供更多實際工作時間。畢竟,你一直工作到現在,不是嗎?