В идеале вы хотели бы сделать это в Power Query. Однако этот вопрос имеет тег excel-2010
, и я думаю, что Power Query доступен только как внешняя надстройка в Excel 2010 (по крайней мере, для Windows).
Второй самый простой подход может быть с VBA. Но этот вопрос не имеет тега vba
. Итак, предположим, что вы хотите достичь этого только с помощью формул.
Это макет моего рабочего листа с именем "Sheet1"
, который, я думаю, соответствует вашей первой таблице.
Это макет моего выходного листа (где я использую формулы для реструктуризации данных). Я думаю, что это соответствует вашему второму столу.
• Формула в желтой ячейке (B1
):
="Loc""IENT(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"
Затем перетащите (как единое целое) вправо.