Заполнить список календаря с начала и конца отметки времени в Excel - PullRequest
0 голосов
/ 09 июня 2019

У меня есть список действий с начальными и конечными временными отметками, и мне нужно заполнить список дат соответствующими действиями и продолжительностью.

Я пробовал различные запутанные операторы IF, VLOOKUPS и INDEX MATCH.

У меня есть следующие данные:

Activity Name   Location          Start                  End          
--------------- ---------- --------------------- --------------------- 
Act1            Loc1       13/07/2019 12:00 AM   15/07/2019 12:00 PM  
Act2            Loc1       20/07/2019 12:00 AM   22/07/2019 12:00 PM  
Act3            Loc2       11/07/2019 12:00 AM   13/07/2019 12:00 PM  

и я хочу отобразить их следующим образом:

 Date         Loc1_Activities   Hours   Loc2_Activities   Hours  
------------ ----------------- ------- ----------------- ------- 
1/07/2019                                                       
2/07/2019                                                       
3/07/2019                                                       
4/07/2019                                                       
5/07/2019                                                       
6/07/2019                                                       
7/07/2019                                                       
8/07/2019                                                       
9/07/2019                                                       
10/07/2019                                                      
11/07/2019                             Act3                 24  
12/07/2019                             Act3                 24  
13/07/2019   Act1                 24   Act3                 12  
14/07/2019   Act1                 24                            
15/07/2019   Act1                 12                            
16/07/2019                                                      
17/07/2019                                                      
18/07/2019                                                      
19/07/2019                                                      
20/07/2019   Act2                 24                            
21/07/2019   Act2                 24                            
22/07/2019   Act2                 12                            
23/07/2019                                                      
24/07/2019                                                      
25/07/2019                                                      
26/07/2019                                                      
27/07/2019                                                      
28/07/2019                                                      
29/07/2019                                                      
30/07/2019                                                      
31/07/2019                                                      

1 Ответ

0 голосов
/ 09 июня 2019

В идеале вы хотели бы сделать это в Power Query. Однако этот вопрос имеет тег excel-2010, и я думаю, что Power Query доступен только как внешняя надстройка в Excel 2010 (по крайней мере, для Windows).

Второй самый простой подход может быть с VBA. Но этот вопрос не имеет тега vba. Итак, предположим, что вы хотите достичь этого только с помощью формул.

Это макет моего рабочего листа с именем "Sheet1", который, я думаю, соответствует вашей первой таблице.

Source data

Это макет моего выходного листа (где я использую формулы для реструктуризации данных). Я думаю, что это соответствует вашему второму столу.

Output data


• Формула в желтой ячейке (B1):

="Loc"&QUOTIENT(COLUMN()-COLUMN($B$1),2)+1

Можно перетащить вправо настолько, насколько вам нужно.


• Формула массива в зеленой ячейке (B4):

=IFERROR(INDEX(Sheet1!$A$2:$A$4,AGGREGATE(15,6,IF(($A4>=INT(Sheet1!$C$2:$C$4))*($A4<ROUNDUP(Sheet1!$D$2:$D$4,0))*(Sheet1!$B$2:$B$4=B$1),ROW(Sheet1!$A$2:$A$4)-ROW(Sheet1!$A$2)+1,NA()),1)),"")

Это необходимо ввести с помощью CTRL+SHIFT+ENTER (Excel автоматически поставит фигурные скобки {} вокруг вашей формулы, чтобы вы знали, что это формула массива). Перетащите его вниз, чтобы заполнить ячейки ниже.


• Формула массива в синей ячейке (C4):

=IF(LEN(B4),(MIN($A4+1,INDEX(Sheet1!$D$2:$D$4,AGGREGATE(15,6,IF(($A4>=INT(Sheet1!$C$2:$C$4))*($A4<ROUNDUP(Sheet1!$D$2:$D$4,0))*(Sheet1!$B$2:$B$4=B$1),ROW(Sheet1!$A$2:$A$4)-ROW(Sheet1!$A$2)+1,NA()),1)))-MAX($A4,INDEX(Sheet1!$C$2:$C$4,AGGREGATE(15,6,IF(($A4>=INT(Sheet1!$C$2:$C$4))*($A4<ROUNDUP(Sheet1!$D$2:$D$4,0))*(Sheet1!$B$2:$B$4=B$1),ROW(Sheet1!$A$2:$A$4)-ROW(Sheet1!$A$2)+1,NA()),1))))*24,"")

Это необходимо ввести с помощью CTRL+SHIFT+ENTER (Excel автоматически поставит фигурные скобки {} вокруг формулы, чтобы вы знали, что это формула массива). Перетащите его вниз, чтобы заполнить ячейки ниже.


• Вы можете ввести дату в ячейку A4 или эту формулу (и перетащить ее вниз в ячейки ниже):

=DATE(2019,7,1)+ROW()-ROW($A$4)

При перетаскивании формул массива (зеленые и синие ячейки) вправо необходимо убедиться, что вы не перезаписываете формулу столбца *_Hours формулой столбца *_Activities. Если вы перетащите их как выбранную единицу (обе ячейки или столбцы), Excel автоматически позаботится об этом за вас. Надеюсь, что это имеет смысл.


Формулы для названий (хотя это не обязательно для работы выше):

  • В камере B3: =B$1&"_Activities"
  • В клетке C3: =C$1&"_Hours"

Затем перетащите (как единое целое) вправо.

...