Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1870|回复: 2

[已解决]老师们,用VBA能实现吗?

[复制链接]
发表于 2016-9-4 08:18 | 显示全部楼层 |阅读模式
本帖最后由 vba新手2 于 2016-9-4 21:31 编辑

列转行,不知道这样格式能不能实现,求老师帮忙
最佳答案
2016-9-4 15:58
vba可以做到,但有些麻烦,
不知这样做有何意义。

转换成第二种格式代码如下:
  1. Sub test_XWZ()
  2.     Dim arr, brr(), i%, j%, n%, m%
  3.     arr = Range("p5").CurrentRegion
  4.     ReDim brr(1 To 4, 1 To 2 * (UBound(arr) - 4))
  5.     For i = 1 To 3
  6.         m = 1
  7.         n = i - 2 * (i = 3)
  8.         For j = 5 To UBound(arr)
  9.             brr(i, m) = arr(j, n)
  10.             brr(i, m + 1) = arr(j, n)
  11.             m = m + 2
  12.         Next
  13.     Next
  14.     m = 1
  15.     For j = 5 To UBound(arr)
  16.         brr(4, m) = arr(j, 3)
  17.         brr(4, m + 1) = arr(j, 4)
  18.         m = m + 2
  19.     Next
  20.     [w23:zz26] = ""
  21.     [w23].Resize(4, m - 1) = brr
  22.     Application.DisplayAlerts = False
  23.     For i = 1 To 3
  24.         For j = 1 To m - 1 Step 2
  25.             Range(Cells(22 + i, 22 + j), Cells(22 + i, 23 + j)).Merge
  26.         Next
  27.     Next
  28.     With [w23].CurrentRegion
  29.         .HorizontalAlignment = xlCenter
  30.         .Font.Size = 9
  31.         .Columns.AutoFit
  32.         .Borders.LineStyle = 1
  33.     End With
  34.     Application.DisplayAlerts = True
  35. End Sub
复制代码
Boox1.rar (23.6 KB, 下载次数: 11)

Boox1.zip

16.33 KB, 下载次数: 12

发表于 2016-9-4 15:58 | 显示全部楼层    本楼为最佳答案   
vba可以做到,但有些麻烦,
不知这样做有何意义。

转换成第二种格式代码如下:
  1. Sub test_XWZ()
  2.     Dim arr, brr(), i%, j%, n%, m%
  3.     arr = Range("p5").CurrentRegion
  4.     ReDim brr(1 To 4, 1 To 2 * (UBound(arr) - 4))
  5.     For i = 1 To 3
  6.         m = 1
  7.         n = i - 2 * (i = 3)
  8.         For j = 5 To UBound(arr)
  9.             brr(i, m) = arr(j, n)
  10.             brr(i, m + 1) = arr(j, n)
  11.             m = m + 2
  12.         Next
  13.     Next
  14.     m = 1
  15.     For j = 5 To UBound(arr)
  16.         brr(4, m) = arr(j, 3)
  17.         brr(4, m + 1) = arr(j, 4)
  18.         m = m + 2
  19.     Next
  20.     [w23:zz26] = ""
  21.     [w23].Resize(4, m - 1) = brr
  22.     Application.DisplayAlerts = False
  23.     For i = 1 To 3
  24.         For j = 1 To m - 1 Step 2
  25.             Range(Cells(22 + i, 22 + j), Cells(22 + i, 23 + j)).Merge
  26.         Next
  27.     Next
  28.     With [w23].CurrentRegion
  29.         .HorizontalAlignment = xlCenter
  30.         .Font.Size = 9
  31.         .Columns.AutoFit
  32.         .Borders.LineStyle = 1
  33.     End With
  34.     Application.DisplayAlerts = True
  35. End Sub
复制代码
Boox1.rar (23.6 KB, 下载次数: 11)
回复

使用道具 举报

 楼主| 发表于 2016-9-4 21:30 | 显示全部楼层
雪舞子 发表于 2016-9-4 15:58
vba可以做到,但有些麻烦,
不知这样做有何意义。

谢谢老师;解决问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-19 01:04 , Processed in 0.237544 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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