2012-03-14 3 views
3

Учитывая набор DateTime диапазонов в Excel, такие как:Excel - Диапазон дат включает в определенное время суток (лучше подход)

Start     Finish 
13/03/2012 10:00:00 14/03/2012 03:00:00 
15/03/2012 08:30:00 15/03/2012 10:00:00 

и некоторые TimeSpan, такие как:

Start  Finish 
07:00:00 09:00:00 

Как вы определяете, будет ли временной интервал в какой-то определенный диапазон дат?

подход, как это может быть началом:

AND(B2 < DATEVALUE(TEXT(B2, "dd/mm/yyyy")) + TIMEVALUE("07:00:00"), 
    B3 >= DATEVALUE(TEXT(B3, "dd/mm/yyyy")) + TIMEVALUE("09:00:00")) 

Хотя она опирается на возможность обеспечить значения старт/финиш явно в отличие от двух дат в любом порядке. Условие на начало < = закончить будет, но похоже, что это слишком сложно.

Есть ли лучший способ?

Редактировать: Бонусные баллы для простых подхода к нахождению процента от диапазона дат, который попадет в промежутке времени

+1

Возможно, лучше подходит для суперпользователя, а не для стека Oveflow. – brettdj

ответ

2

Это должно дать количество часов, попадающих в промежуток времени (но это, безусловно, не простой!):

=MEDIAN(F2,G2+(G2<F2),MOD(B2,1)+(MOD(B2,1)<MOD(A2,1))) 
-MEDIAN(F2,G2+(G2<F2),MOD(A2,1)) 
+(F2<G2)*(MOD(B2,1)<MOD(A2,1))*MAX(MIN(MOD(B2,1),G2)-F2,0) 

Если это больше, чем 0, то диапазон дат попадет в промежутке времени, разделю на B2-A2 для процента.

например. Диапазон дат: 6:00 PM - 9:00 AM, Временной интервал: 7:00 AM - 7:00 PM возвращается 03:00, что составляет 20% от диапазона дат.

+1

Привет @lori_m, если диапазон дат - 18:00 - 9:00, как вы предполагаете, а Time Span - 7:00 - '8:00 AM' - ваша формула дает мне 2:00, не должно быть 1: 00? Я думаю, что вы можете использовать эту версию для правильного результата '= (F2> G2) * (B2-A2) + SIGN (G2-F2) * ((INT (B2) <> INT (A2)) * (MAX (G2 , F2) -MIN (F2, G2)) + MEDIAN (MOD (B2,1), F2, G2) -MEDIAN (MOD (A2,1), F2, G2)) ... [Я предполагаю даты и время в A2 и B2, не более 24 часов ....] –

+0

Nice one! Я изменил последний MOD (B2,1) на MIN (MOD (B2,1), G2), который, я думаю, теперь дает те же значения, что и у вас. Ваша формула на 23 символа короче, поэтому я бы пошел с этим, единственное возможное преимущество выложенной формулы - это разрешить диапазон дат, указанный только по времени. –

+1

@barry: Если вы посмотрите на это снова, я думаю, что ваша формула может быть упрощена с 'SIGN (G2-F2) * (MAX (G2, F2) -MIN (F2, G2))' такая же, как 'G2 -F2'. Таким образом, с диапазоном дат, заданным только по времени, мы могли бы использовать: '= MOD ((F2> G2) * (B2-A2) + (A2> B2) * (G2-F2) + SIGN (G2-F2) * (медиана (В2, F2, G2), -медиан (А2, F2, G2)), 1) '. Однако существует какая-то двусмысленность, если промежуток времени пересекает полночь. Например, если мы заменим диапазон дат и временной интервал в приведенном выше примере, должен ли результат быть 1, 2 или 3 часа? –

0

говорит, что диапазоны дат в колонках А и В, а также временном интервале в F2 и G2. Примените следующие формулы и перетащите их вниз.

H2 = IF(AND($F$2>=RIGHT(A2,8),$F$2<RIGHT(B2,8),$G$2>RIGHT(A2,8),$G$2<=RIGHT(B2,8)),1,0) 

В столбце H указано, действительно ли это для определенного диапазона дат.

I1 = SUM(H2:H4)/COUNT(H2:H4) 

I1 дает процент

4

кажется, что Вы предполагаете, что даты всегда будет в тот же день, что в случае?

Попробуйте

=AND(MOD(A2,1)<=F2,MOD(B2,1)>=G2)

Для проценте

=MAX(0,MIN(MOD(B2,1),G2)-MAX(MOD(A2,1),F2))/(B2-A2)

Update:

Если диапазон дат может быть неограниченным, 1 день или много, то вы можете использовать эту формулу получить общее количество часов в течение времени

=(INT(B2)-INT(A2))*(G$2-F$2)+MEDIAN(F$2,G$2,MOD(B2,1))-MEDIAN(MOD(A2,1),G$2,F$2)

, что предполагает, что TimeSpan не пересекает полночь - если TimeSpan может кросс полночь, например, может быть 08:00 - 11:00, но также может быть 22:00 - 03:00, то эта формула должна работать

=(F$2>G$2)*(B2-A2)+SIGN(G$2-F$2)*((INT(B2)-INT(A2))*ABS(G$2-F$2)+MEDIAN(F$2,G$2,MOD(B2,1))-MEDIAN(MOD(A2,1),G$2,F$2))

+0

Спасибо, не подумал бы об этом. Но ища какой-либо определенный диапазон дат, обновленный вопрос, чтобы отразить это. – Kyle

+0

ОК, так в чем вопрос? Все ли временные рамки происходят по крайней мере один раз (непрерывный) в пределах диапазона дат? Какова максимальная длина «диапазона дат», может быть, более 24 часов? –

+0

Не предполагая каких-либо ограничений по диапазонам для моего случая, это является опрятным, если диапазон дат определен как один день. – Kyle

Смежные вопросы