如何快速将多列数据转换为多行数据
在我的工作表中,同一行是学生的测试项目和课外兴趣班的所有信息,如下图1所示。
图1:学生的一般信息存储在工作表“InputData”的a到c列,学生的考试项目信息存储在d到w列,考试项目信息分为“考试项目、考试日期、分数、等级”列,共重复5次(即有5个考试项目)。
图2:学生课外兴趣班的信息存储在工作表中“InputData”的X到AI列。课后兴趣班信息分为“课后兴趣班、频率、时长、效果”,已重复三次。
现在,工作表“InputData”同一行中的数据应该转换成多行数据,并存储在工作表“OutputData”中,如下图3所示。
图3:转换成多行数据的结果。每个学生的“考试项目、考试日期、分数、成绩”和“课外兴趣班、频率、时长、效果”的信息都放在不同的行里。
您可以使用VBA代码快速完成数据转换:
从1开始设置数组下标。
选项基础1
用户定义的类型
打字学生
信息()作为变体
考试(5)作为变体
利息(5)作为变体
结束类型
子主输出()
将周调暗为工作表
模糊如龙
将输入数据调暗为范围
获取要处理的数据区域。
设置rngInputData=工作表(“输入数据”)。范围(“A1”)。当前区域
设置rngInputData=rngInputData。偏移量(1,0)。_
调整大小(rngInputData。行数。计数1,输入数据。列数)
调用输出数据过程来处理数据。
输出数据输入数据,工作表(“输出数据”)。范围(“A2”)
自动调整列宽。
工作表(“输出数据”)。范围(“A1”)。
末端接头
子输出数据(源作为范围,目标作为范围)
暗淡的标题()作为变体
将输入调暗为长
模糊如龙
暗淡的j一样长
像龙一样暗淡
作为学生
输出表格标题。
标题=数组(“数字”、“姓名”、“性别”,_
“测试项目”、“测试日期”、“分数”、“等级”,_
“课外兴趣班”、“频率”、“时长”、“效果”)。
获取输入数据行并定义数组大小。
inputRows=rngSource。行,计数
ReDim stu(输入窗口)
遍历输入数据。
对于i=1至输入
将相应的数据依次存储在数组中。
和斯图(我)
k=4
存储前3列数据。信息=范围(rngSource。项目(I,1),rngSource。项目(一,3))
存储以下重复标题对应的数据。
对于j=1至5。考试(j)=范围(rngSource。项目(I,k),rngSource。项目(I,k(3))。价值。利息(j)=范围(rngSource。项目(I,k 20),rngSource。项目(I,k(23))。价值
k=k 4
下一个j
以…结尾
接下来我
清空放置数据的工作表。
rngTarget。当前区域。清除内容
输入标题。
rngTarget。偏移量(-1,0)。调整大小(1,11)。值=标题
k=-1
输入数据。
对于i=1至输入
对于j=1至5
和斯图(我)
如果。考试(j)(1,1)“或”。利息(j)(1,1)"然后
k=k 1
rngTarget。偏移量(k,0)。调整大小(1,3)。值=。信息
rngTarget。偏移量(k,3)。调整大小(1,4)。值=。考试(j)
rngTarget。偏移量(k,7)。调整大小(1,4)。值=。利息(j)
其他
退出
如果…就会结束
以…结尾
下一个j
接下来我
末端接头
上述代码中使用了一些注释,以方便阅读和理解。应该注意的是,代码使用用户定义的类型,这显然是为了不同的目的存储数据,并且可以很容易地调用。这是一项好技能。
此外,这个例子再次表明,根据数据整理的具体要求,使用一些VBA码可以快速达到目的,消除了重复操作和容易出错的麻烦。
版权声明:如何快速将多列数据转换为多行数据是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。