Я создал расписание в 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
или SUMIFS
, но, насколько я понял, он принимает только диапазоны как B1:G1
, но не принимает что-то вроде B1;D1;F1
, то есть пропускает каждый второй столбец. Я понятия не имею, как я могу это сделать, потому что я вообще не эксперт по Excel ... Это то, что я пробовал до сих пор, но это не работает, это только дает мне #VALUE
:
= SUM($C2; $E2; $G2) - SUMIF(($C2; $E2; $G2); "<>"; ($B2; $D2; $F2))
Это должно означать: суммировать по C, E и G и вычитать сумму B, D и F, если соответствующие ячейки в C, E и G не пусты. Однако круглые скобки вокруг диапазонов, похоже, не работают. Или проблема в другом?
Ответы:
Я черпал вдохновение из подхода Мэдбола, но без необходимости в дополнительном ряду. Используйте это для строки 2, скопированной вниз
=C2+E2+G2-B2-D2-F2+MOD(COUNT(B2:G2),2)*MAX(B2:G2)
Это добавление лет / вычитает раз , сколько необходимо , но добавляет назад в последний раз (игнорируя его) , когда есть нечетное число раз , вставленные.
источник
MOD
с ,ISODD
потому что это то , что мы проверяем:=C2+E2+G2 - B2-D2-F2 + IF(ISODD(COUNT(B2:G2)), MAX(B2:G2), 0)
Вот что я бы сделал. Если вставить дополнительные столбцы, формула легко корректируется:
=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.
Если есть нечетное количество входов / выходов / это добавляет последний (самый высокий) раз, чтобы нейтрализовать его.
источник
Я не уверен, что полностью понимаю ваш вопрос, но это работает
Я использовал простое утверждение if
Это будет даже неполный рабочий день (например, строка 4, где работал только полдень).
Если вам нужно добавить третий набор входов / выходов, обновите формулу в соответствии с
источник
18:00
в столбецC
, это приведет к неправильному среднему значению для столбцовC
иE
потому чтоC
на самом деле это мой столбец для "на обед". (Тем не менее, вы правы насчет визита к врачу ... Возможно, мне следует добавить еще десять столбцов для непредвиденных перерывов.;)) Мне это не очень нужно, но я бы хотел, чтобы это было. И я решил найти решение, которое может справиться со всеми этими случаями.Попробуйте это VBa
Это результат
Это не полностью проверено (кроме того, что показано на снимке экрана) ...
источник
Как насчет того, чтобы попытаться заменить это:
с этим:
Эта формула должна помещать текущее время в пустые ячейки ($ C2, $ E2, $ G2), что должно дать вам больше реального рабочего времени. В конце концов, вы работаете до сих пор, не так ли?
источник