Você pode fazer a transposição sem qualquer macro:
O caminho direto para o primeiro passo seria usar a função TRANSPOSE , ou seja, selecione um intervalo que seja 365rowsx24cols e digite =TRANSPOSE(B4:NB27) e pressione Ctrl + Shift + Digite .
No entanto, eu recomendaria abordar o problema 1 e 2 de uma maneira ligeiramente diferente: converta seus dados em uma lista, ou seja, uma tabela com 365 x 24 linhas x 3 colunas: Data , Hora , Valor . Essa tabela pode ser facilmente usada como fonte para uma tabela dinâmica!
Para fazer isso, você pode usar duas colunas auxiliares - a primeira começando em 1 e aumentando cada linha por uma até que seja 24, então redefina (Em A2: 1 , em A3: =IF(A2=24,1,A2+1) ), a segunda começando com 1 e aumentando em 1 a cada 24 linhas (B2: 1 , B3: =IF(A3=1,B2+1,B2) . Alternativamente, você poderia simplesmente usar a função ROW() (que retorna a linha da célula com a fórmula se nenhum parâmetro for fornecida) para derivar o número 1 a 24 com MOD(ROW(),24)-1 e o 1 a 365 com INT((ROW()-2)/24)+1 . (O +1 e -2 deve ajustar para a tabela de dados começando na linha 2).
Usando a função INDEX com esses dois parâmetros, agora você pode recuperar facilmente os dados das três colunas:
Data: =INDEX($B$3:$NB$3,B2) (ou sem as colunas auxiliares: =INDEX($B$3:$NB$3,INT((ROW()-2)/24)+1) )
Hora: =INDEX($A$4:$A$27,A2) (ou =INDEX($A$4:$A$27,MOD(ROW(),24)-1) )
Valor: =INDEX($B$4:$NB$27,A2,B2) (ou =INDEX($B$4:$NB$27,MOD(ROW(),24)-1),INT((ROW()-2)/24)+1) )