在 Excel 中转换数据

在 Excel 中转换数据

我的 Excel 数据有两个问题。

  1. 我有这张表,所以一年中的每一天我都有 24 个值,也就是 365 列。

图片1 http://imageshack.us/a/img600/1773/dataxz.jpg

我需要编写一个宏来转换数据垂直排列,上下排列。就像在其他表格中一样。因此 1.1.1996 在 (B4:B28) 中,2.1.1996 在 (B29:B53) 中,等等。我制作了一个简单的宏,但我不知道如何自动继续使用它。

  1. 第二个问题是数据透视表,或者说,如何轻松地分别计算每日/每周/每月的平均值或每列的总和。然后是图表。我制作了一个表格,但它让我计算出错误的平均值

图片2 http://imageshack.us/a/img690/5305/pivottable.png

答案1

无需任何宏即可进行转置:

第一步的直接方法是使用函数TRANSPOSE,即选择 365rowsx24cols 的范围,然后输入=TRANSPOSE(B4:NB27)并按Ctrl+ Shift+ Enter

不过,我建议以稍微不同的方式解决问题 1 和 2:将数据转换为列表,即 365x24 行 x 3 列的表格:日期小时价值。然后可以轻松将该表用作数据透视表的源!

为此,您可以使用两个辅助列 - 第一个从 1 开始,每行增加 1 直到达到 24 然后重置(在 A2:,1在 A3:)=IF(A2=24,1,A2+1),第二个从 1 开始,每 24 行增加 1(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)

相关内容