问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何快速将多列数据转换成多行数据

发布网友 发布时间:2024-07-13 00:59

我来回答

1个回答

热心网友 时间:2024-07-21 20:54

在我的工作表中,同一行是某学生测试项目和课外兴趣班的全部信息,如下图1所示。

图1:在工作表“InputData”列A至列C中存储学生一般信息,列D至列列W存储着学生测试项目信息。测试项目信息分为“测试项目、测试日期、分数、等级”列,共重复5次(即有5个测试项目)。

图2:在工作表“InputData”列X至列AI存储着学生课外兴趣班信息。课外兴趣班信息分为“课外兴趣班、频次、持续时间、效果”列,共重复了3次。
现在,要将工作表“InputData”同一行中的数据转换成多行数据,并存储到工作表“OutputData”中,如下图3所示。

图3:转换成多行数据的结果。每名学生的“测试项目、测试日期、分数、等级”和“课外兴趣班、频次、持续时间、效果”信息放置在不同的行中。
可以使用VBA代码来快速完成数据的转换:
‘设置数组下标从1开始
Option Base 1
‘自定义类型
Type student
info() As Variant
exam(5) As Variant
interest(5) As Variant
End Type
Sub MainOutput()
Dim wks As Worksheet
Dim i As Long
Dim rngInputData As Range
‘获取要处理的数据区域
Set rngInputData =Worksheets(“InputData”).Range(“A1”).CurrentRegion
Set rngInputData = rngInputData.Offset(1,0). _
Resize(rngInputData.Rows.Count – 1,rngInputData.Columns.Count)
‘调用OutputData过程处理数据
OutputData rngInputData,Worksheets(“OutputData”).Range(“A2”)
‘自动调整列宽
Worksheets(“OutputData”).Range(“A1”).CurrentRegion.Columns.AutoFit
End Sub
Sub OutputData(rngSource AsRange, rngTarget As Range)
Dim titles() As Variant
Dim inputRows As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim stu() As student
‘输出表标题
titles = Array(“编号”, “姓名”, “性别”, _
“测试项目”, “测试日期”, “分数”, “等级”, _
“课外兴趣班”, “频次”, “持续时间”, “效果”)
‘获取输入数据行数并定义数组大小
inputRows = rngSource.Rows.Count
ReDim stu(inputRows)
‘遍历输入数据
For i = 1 To inputRows
‘依次将相应数据存放在数组中
With stu(i)
k = 4
‘存储前3列数据
.info = Range(rngSource.Item(i, 1),rngSource.Item(i, 3))
‘存储后面重复标题相应的数据
For j = 1 To 5
.exam(j) =Range(rngSource.Item(i, k), rngSource.Item(i, k + 3)).Value
.interest(j) =Range(rngSource.Item(i, k + 20), rngSource.Item(i, k + 23)).Value
k = k + 4
Next j
End With
Next i
‘清空放置数据的工作表
rngTarget.CurrentRegion.ClearContents
‘输入标题
rngTarget.Offset(-1, 0).Resize(1, 11).Value= titles
k = -1
‘输入数据
For i = 1 To inputRows
For j = 1 To 5
With stu(i)
If .exam(j)(1, 1) >”” Or .interest(j)(1, 1) > “” Then
k = k + 1
rngTarget.Offset(k,0).Resize(1, 3).Value = .info
rngTarget.Offset(k,3).Resize(1, 4).Value = .exam(j)
rngTarget.Offset(k, 7).Resize(1,4).Value = .interest(j)
Else
Exit For
End If
End With
Next j
Next i
End Sub
上述代码中使用了一些注释,方便阅读和理解。要说明的是,代码使用了自定义类型,很清楚地存储不同用途的数据,并能够很方便地调用,这是一个很好的技巧。
此外,本示例再次表明,针对特定的数据整理需求,使用一些VBA代码,就可快速达到目的,省去了重复操作的繁杂和易出错的烦恼。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Hive笔记 Hive-元数据 英语low是什么意思 Low low 的是什么意思? 如何打开电脑设置的打印机电脑打印设置在哪里打开 使用电脑打印机怎么设置打印机和电脑怎样连接该如何设置 win10打印机设置在哪里 win10打印机设置方法介绍 怎么在电脑上设置打印机在电脑上怎么找打印机设置 怎样为电脑设置打印机电脑里打印机设置在哪 电脑打印机在哪里设置电脑上的打印机在哪里 ios魔塔无敌版23层怎么解?详细一点吧 35层的魔龙过不去啊裸谢谢_百度... 二字钳羊马是什么样的、 魔塔60层无敌版66层怎么过介绍_魔塔60层无敌版66层怎么过是什么_百度... ...最近我爸准备教我咏春,他叫我先站好二字钳羊马,我站这个马已经4天了... ...我一直用杨式太极拳健身,咏春拳二字钳羊马,需要站多长时间,有类似于... excel表格如何批量将列转为行 男生给女生发 老女人是什么意思? 石家庄那里有修拉杆箱轱辘的 123456按加减乘除顺序最后等于24 求2k12存档 姚明 易建联 孙悦 林书豪……等等越多越好 读“黄土高原示意图”,完成下列问题:(1)写出字母代表5地形名称.A... 女生为什么打舌钉? 翻译一篇文,,,英文,,,有水平的进~~~·· 萧山医保卡在胡庆余堂好用吗 天外世界多少g 廊坊文体活动发票在哪里开 红米能用联通卡吗,能用的话,我去买王卡了。 小米红米手机怎么样?能用移动的网聊卡或联通的新势力流量王卡么 怎样在excel图表中显示数值和百分比? 有什么手机播放器可以选择音频输出... ...肘、肩)关节周围有受凉的感觉,我练的是二字钳羊马,站了一周左右_百... 魔塔无敌版攻略 魔塔60层无敌版操作说明 手机魔塔英雄无敌版第20层怎样过?攻击和防御都该达到多少?(只差最里面... 作文:用 捂热心坎 捂热是什么意思? 捂热什么意思 孕妇能喝苦荞茶吗能不能吃 重庆2019年春招单招到底去不去培训班呀高中玩了三年现在好慌啊!_百度... 小米手机2侧面是不是和苹果的一样啊 刚出小米手机有那几款 性能和苹果4差不多的是那一款 ...下小米2a手机的外形。重点在于他的外形是否和苹果的相似。谢谢_百度... 哈尔滨清华苑幼儿园校长简介 宝马3系内饰改装 枣庄科技职业学院的网站是什么? 我有羊癫疯吃猫头鹰放在洋玉叶里面把起放火里面烤怎样治得疗 树木的好句子 方舟生存进化矿砂兽怎么驯养 中国绿化工程的前景 园林专业就业前景如何 主要课程有哪些