Excel精英培训网

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

[已解决]竖列数据转换成横列数据

[复制链接]
发表于 2012-5-26 20:59 | 显示全部楼层 |阅读模式
如何将A1:B21区域中的数据转换成E1:L15区域的数据
相同数据在一起放置5行,超过5行的数据增加列数放置,效果见附件.请高手相助.谢谢!

最佳答案
2012-5-27 09:45
本帖最后由 hrpotter 于 2012-5-27 09:46 编辑
蓝天一片云 发表于 2012-5-26 22:26
谢谢您的回复!
如果能将最后的单元格赋值改成数组赋值,效果就更好了。

原理是一样的,把单元格区域替换成数组就行了
  1. Sub test()
  2.     Dim ar, br, cr, dr(1 To 1000, 1 To 240), d
  3.     Dim i As Integer, j As Integer, k As Integer
  4.     Range("e:iv").Clear
  5.     Set d = CreateObject("scripting.dictionary")
  6.     ar = Range("a1:b1")
  7.     br = Range("a2:b" & Range("a65536").End(xlUp).Row)
  8.     For i = 1 To UBound(br)
  9.         d(br(i, 1)) = ""
  10.     Next
  11.     cr = d.keys
  12.     For i = 0 To UBound(cr)
  13.         k = 0
  14.         For j = 1 To UBound(br)
  15.             If br(j, 1) = cr(i) Then
  16.                 If (k Mod 4) = 0 Then
  17.                     dr(5 * i + 1, (k \ 4) * 3 + 1) = ar(1, 1)
  18.                     dr(5 * i + 1, (k \ 4) * 3 + 2) = ar(1, 2)
  19.                 End If
  20.                 dr(5 * i + 2 + (k Mod 4), (k \ 4) * 3 + 1) = br(j, 1)
  21.                 dr(5 * i + 2 + (k Mod 4), (k \ 4) * 3 + 2) = br(j, 2)
  22.                 k = k + 1
  23.             End If
  24.         Next
  25.     Next
  26.     Range("e1").Resize(1000, 240) = dr
  27. End Sub
复制代码


120526.rar

4.79 KB, 下载次数: 28

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-5-26 21:02 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2012-5-26 21:12 | 显示全部楼层
无聊的疯子 发表于 2012-5-26 21:02
搞不明白为啥要这样排??

想学习字典排列的方法,请师兄指点。谢谢!
回复

使用道具 举报

发表于 2012-5-26 22:04 | 显示全部楼层
蓝天一片云 发表于 2012-5-26 21:12
想学习字典排列的方法,请师兄指点。谢谢!
  1. Sub test()
  2.     Dim ar, br, cr, d
  3.     Dim i As Integer, j As Integer, k As Integer
  4.     Range("e:iv").Clear
  5.     Set d = CreateObject("scripting.dictionary")
  6.     ar = Range("a1:b1")
  7.     br = Range("a2:b" & Range("a65536").End(xlUp).Row)
  8.     For i = 1 To UBound(br)
  9.         d(br(i, 1)) = br(i, 1)
  10.     Next
  11.     cr = d.items
  12.     For i = 0 To UBound(cr)
  13.         k = 0
  14.         For j = 1 To UBound(br)
  15.             If br(j, 1) = cr(i) Then
  16.                 If (k Mod 4) = 0 Then
  17.                     Cells(5 * i + 1, (k \ 4) * 3 + 5).Resize(1, 2) = ar
  18.                 End If
  19.                 Cells(5 * i + 2 + (k Mod 4), (k \ 4) * 3 + 5) = br(j, 1)
  20.                 Cells(5 * i + 2 + (k Mod 4), (k \ 4) * 3 + 6) = br(j, 2)
  21.                 k = k + 1
  22.             End If
  23.         Next
  24.     Next
  25. End Sub
复制代码


回复

使用道具 举报

 楼主| 发表于 2012-5-26 22:26 | 显示全部楼层
hrpotter 发表于 2012-5-26 22:04

谢谢您的回复!
如果能将最后的单元格赋值改成数组赋值,效果就更好了。
回复

使用道具 举报

发表于 2012-5-27 09:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrpotter 于 2012-5-27 09:46 编辑
蓝天一片云 发表于 2012-5-26 22:26
谢谢您的回复!
如果能将最后的单元格赋值改成数组赋值,效果就更好了。

原理是一样的,把单元格区域替换成数组就行了
  1. Sub test()
  2.     Dim ar, br, cr, dr(1 To 1000, 1 To 240), d
  3.     Dim i As Integer, j As Integer, k As Integer
  4.     Range("e:iv").Clear
  5.     Set d = CreateObject("scripting.dictionary")
  6.     ar = Range("a1:b1")
  7.     br = Range("a2:b" & Range("a65536").End(xlUp).Row)
  8.     For i = 1 To UBound(br)
  9.         d(br(i, 1)) = ""
  10.     Next
  11.     cr = d.keys
  12.     For i = 0 To UBound(cr)
  13.         k = 0
  14.         For j = 1 To UBound(br)
  15.             If br(j, 1) = cr(i) Then
  16.                 If (k Mod 4) = 0 Then
  17.                     dr(5 * i + 1, (k \ 4) * 3 + 1) = ar(1, 1)
  18.                     dr(5 * i + 1, (k \ 4) * 3 + 2) = ar(1, 2)
  19.                 End If
  20.                 dr(5 * i + 2 + (k Mod 4), (k \ 4) * 3 + 1) = br(j, 1)
  21.                 dr(5 * i + 2 + (k Mod 4), (k \ 4) * 3 + 2) = br(j, 2)
  22.                 k = k + 1
  23.             End If
  24.         Next
  25.     Next
  26.     Range("e1").Resize(1000, 240) = dr
  27. End Sub
复制代码


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 12:46 , Processed in 0.130863 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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