Вы можете сделать транспонирование без какого-либо макроса:
Прямой способ для вашего первого шага - использовать функцию TRANSPOSE
, то есть выбрать диапазон, который равен 365rowsx24cols, ввести =TRANSPOSE(B4:NB27)
и нажать Ctrl+Shift+Enter.
Однако я бы порекомендовал решить проблемы 1 и 2 немного по-другому: переведите ваши данные в список, то есть в таблицу с 365x24 строками x 3 столбцами: Date, Hour, Value. Эта таблица может быть легко использована в качестве источника сводной таблицы!
Для этого вы можете использовать два вспомогательных столбца - первый, начинающийся с 1 и увеличивающий каждую строку на одну, пока не станет 24, а затем сбрасывается (в A2: 1
, в A3: =IF(A2=24,1,A2+1)
), вторая начинается с 1 и увеличивается на 1 каждые 24 строки (B2: 1
, B3: =IF(A3=1,B2+1,B2)
. В качестве альтернативы, вы можете просто использовать функцию ROW()
(которая возвращает строку строки с формулой, если не указан параметр), чтобы получить число от 1 до 24 с помощью MOD(ROW(),24)-1
и 1 до 365 с INT((ROW()-2)/24)+1
. (+1
и -2
предназначены для корректировки таблицы данных, начиная со строки 2).
Используя функцию INDEX
с этими двумя параметрами, вы теперь можете легко получить данные для 3 столбцов:
Дата: =INDEX($B$3:$NB$3,B2)
(или без вспомогательных столбцов: =INDEX($B$3:$NB$3,INT((ROW()-2)/24)+1)
)
Час: =INDEX($A$4:$A$27,A2)
(или =INDEX($A$4:$A$27,MOD(ROW(),24)-1)
)
Значение: =INDEX($B$4:$NB$27,A2,B2)
(или =INDEX($B$4:$NB$27,MOD(ROW(),24)-1),INT((ROW()-2)/24)+1)
)