ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4158|回复: 15

[已解决] 怎么用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, 下载次数: 40)

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

查看全部评分

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 | 显示全部楼层

为什么我这里“arr = [Sheet1].UsedRange”这一行会报424的错误

TA的精华主题

TA的得分主题

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

行列转换.rar

20.38 KB, 下载次数: 61

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 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

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

本版积分规则

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

GMT+8, 2024-3-28 18:38 , Processed in 0.052990 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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