Excel精英培训网

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

[已解决]如何实现将一列数据转换成每8个一行排列?

[复制链接]
发表于 2013-10-30 17:37 | 显示全部楼层 |阅读模式
如何实现将一列数据转换成每8个一行排列?
现在手上需要大量统计一个花名册,但是名字都是一列的,现在需要做一个表格,每8个一行排列,不知道该如何实现?
最佳答案
2013-10-30 19:32
Dim ar1(), ar2()
ar1 = 数据源区域.Value
ReDim ar2(1 To Int((UBound(ar1) + 7) / 8), 1 To 8)
r% = 1
c% = 1
For i% = 1 To UBound(ar1)
   ar2(r, c) = ar1(i, 1)
   c = c + 1
   If c > 8 Then
      r = r + 1
      c = 1
   End If
Next
目的区域.Resize(UBound(ar2), UBound(ar2, 2)) = ar2
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-10-30 18:14 | 显示全部楼层
方法很多,最好能将实际的文件压缩后发来,也方便测试。
回复

使用道具 举报

发表于 2013-10-30 19:32 | 显示全部楼层    本楼为最佳答案   
Dim ar1(), ar2()
ar1 = 数据源区域.Value
ReDim ar2(1 To Int((UBound(ar1) + 7) / 8), 1 To 8)
r% = 1
c% = 1
For i% = 1 To UBound(ar1)
   ar2(r, c) = ar1(i, 1)
   c = c + 1
   If c > 8 Then
      r = r + 1
      c = 1
   End If
Next
目的区域.Resize(UBound(ar2), UBound(ar2, 2)) = ar2
回复

使用道具 举报

发表于 2013-10-30 19:50 | 显示全部楼层
我编了一个公式,请看附件。

填充.zip

7.98 KB, 下载次数: 39

回复

使用道具 举报

发表于 2013-10-30 20:06 | 显示全部楼层
请看。
  1. Sub 转换()
  2. Dim ar1(), ar2()
  3. Set 数据源区域 = [A1].CurrentRegion
  4. ar1 = 数据源区域.Value
  5. ReDim ar2(1 To Int((UBound(ar1) + 7) / 8), 1 To 8)
  6. r% = 1
  7. c% = 1
  8. For i% = 1 To UBound(ar1)
  9.    ar2(r, c) = ar1(i, 1)
  10.    c = c + 1
  11.    If c > 8 Then
  12.       r = r + 1
  13.       c = 1
  14.    End If
  15. Next
  16. Set Rng = Application.InputBox("请选择存放区域起始单元格", "VBA", , , , , , 8)
  17. If Rng Is Nothing Then Exit Sub
  18. Rng.CurrentRegion.ClearContents
  19. Rng.Resize(UBound(ar2), UBound(ar2, 2)) = ar2
  20. End Sub
复制代码
回复

使用道具 举报

发表于 2013-10-30 20:07 | 显示全部楼层
附件。

格式转换.rar

15.72 KB, 下载次数: 34

回复

使用道具 举报

发表于 2013-10-30 20:16 | 显示全部楼层
本帖最后由 张雄友 于 2013-10-30 20:21 编辑

修改一下。
  1. Sub 转换()
  2. Dim ar1(), ar2(), r&, c&, i&
  3. Set 数据源区域 = Application.InputBox("请选择源区域", "VBA", , , , , , 8)
  4. ar1 = 数据源区域.Value
  5. LL = InputBox("请输入要转几列?", "VBA", 8)
  6. If LL <> "" Then
  7.    If LL > 256 Then
  8.       MsgBox "2003版本不能满足设定的格式!"
  9.       Exit Sub
  10.    End If
  11.    End If
  12. ReDim ar2(1 To Int((UBound(ar1) + LL - 1) / LL), 1 To LL)
  13. r& = 1
  14. c& = 1
  15. For i& = 1 To UBound(ar1)
  16.    ar2(r, c) = ar1(i, 1)
  17.    c = c + 1
  18.    If c > LL Then
  19.       r = r + 1
  20.       c = 1
  21.    End If
  22. Next
  23. Set Rng = Application.InputBox("请选择存放区域起始单元格", "VBA", , , , , , 8)
  24. If Rng Is Nothing Then Exit Sub
  25. Rng.CurrentRegion.ClearContents
  26. Rng.Resize(UBound(ar2), UBound(ar2, 2)) = ar2
  27. End Sub
复制代码
回复

使用道具 举报

发表于 2013-10-30 20:21 | 显示全部楼层
张雄友 发表于 2013-10-30 20:16
修改一下。

可以改来不要r和c么
回复

使用道具 举报

发表于 2013-10-30 20:25 | 显示全部楼层
djyjysxxs 发表于 2013-10-30 20:21
可以改来不要r和c么

没到水平。
回复

使用道具 举报

 楼主| 发表于 2013-10-30 20:56 | 显示全部楼层
哈哈,多谢上面几位老兄支招,我测试一下!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 11:53 , Processed in 0.438417 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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