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)
)