ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 EH云课堂直播课程免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 782|回复: 14

[已解决] 怎么用VBA将数据批量行列转换/转置

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-8 21:36 | 显示全部楼层 |阅读模式
本帖最后由 martinmaster 于 2019-9-9 22:05 编辑

一个Excel里有成千上万行的数据,怎么用VBA将Sheet1的数据进行转置,并且将转置后的数据放到sheet2?
就是图1 转为图二
求助大神!!谢谢
1.jpg

2.jpg

详情请看附件: 行列转换.zip (9.59 KB, 下载次数: 17)

TA的精华主题

TA的得分主题

发表于 2019-9-8 22:41 | 显示全部楼层
本帖最后由 yxbaju 于 2019-9-8 22:43 编辑
  1. Sub Trans()
  2.     Dim arr, brr, i&, n&, m As Byte, j As Byte
  3.     arr = [Sheet1].UsedRange
  4.     ReDim brr(1 To (UBound(arr, 2) - 4) * (UBound(arr) - 1), 1 To UBound(arr))
  5.     n = 1
  6.     For i = 2 To UBound(arr)
  7.         For m = 1 To 4
  8.             brr(n, m) = arr(i, m)
  9.         Next
  10.         For j = 5 To UBound(arr, 2)
  11.             brr(n, 5) = arr(i, j)
  12.             n = n + 1
  13.         Next
  14.     Next
  15.     With ActiveSheet
  16.         For m = 1 To 4
  17.             .Cells(1, m) = arr(1, m)
  18.             .Cells(1, 5) = "DIMM SN"
  19.         Next
  20.         .[A2].Resize(n - 1, 5) = brr
  21.     End With
  22. End Sub
复制代码

评分

参与人数 2鲜花 +3 收起 理由
zfychina + 1 太强大了
martinmaster + 2 优秀作品

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-9-8 23:55 | 显示全部楼层

挺紧凑的,有个小疑问
04 行:Redim brr语句中的1 To UBound(arr) 是不是少了个2,写成1 To UBound(arr,2) 好点。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-9 07:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-9 08:22 | 显示全部楼层
PQ参考解法
微信截图_20190909082007.png

行列转换.rar

20.38 KB, 下载次数: 25

TA的精华主题

TA的得分主题

发表于 2019-9-9 08:47 | 显示全部楼层
martinmaster 发表于 2019-9-9 07:35
为什么我这里“arr = [Sheet1].UsedRange”这一行会报424的错误

[Sheet1]是不是被你删掉了?

TA的精华主题

TA的得分主题

发表于 2019-9-9 08:52 | 显示全部楼层
wodewan 发表于 2019-9-8 23:55
挺紧凑的,有个小疑问
04 行:Redim brr语句中的1 To UBound(arr) 是不是少了个2,写成1 To UBound(arr ...

brr应该是个n行5列的数组,第二维可以是1 to 5

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-9 09:07 | 显示全部楼层
yxbaju 发表于 2019-9-9 08:47
[Sheet1]是不是被你删掉了?

哦哦,谢谢提醒,是表名的原因,我的是中文的.谢谢.

TA的精华主题

TA的得分主题

发表于 2019-9-9 09:31 | 显示全部楼层
yxbaju 发表于 2019-9-9 08:52
brr应该是个n行5列的数组,第二维可以是1 to 5

对,就是这个意思,写成1 to 5就可以了,我以为你想写成1 to ubound(arr,2),这样数据小了也不溢出,浪费也就浪费了固定的23个,但如果写成1 to ubound(arr),就不太对了,记录数小了,就溢出,大了就无止境的浪费,个人意见啊,莫怪,哈哈。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-16 09:29 | 显示全部楼层

你好,请问有用VBA的方法吗?因为公司里用的是2013的Excel,没有PQ的插件
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

关注官方微信,每天学会一个新技能

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2019-12-11 16:47 , Processed in 1.461525 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

快速回复 返回顶部 返回列表