Excel精英培训网

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

[已解决]数据展开,hurry

[复制链接]
发表于 2014-11-3 15:47 | 显示全部楼层 |阅读模式
本帖最后由 billyzhang0609 于 2014-11-3 19:45 编辑

如题如附件:

      做出如图的效果,请问如何实现?
最佳答案
2014-11-3 17:10
  1. Sub demo()
  2.     Dim arr, arr3(1 To 256, 1 To 12)
  3.     Dim i&, j&, k&, lRow&
  4.     Dim sht As Worksheet
  5.     Dim strPrefix$, lSn&

  6.     '源数据
  7.     arr = Range("a1").CurrentRegion
  8.     Application.ScreenUpdating = False
  9.     Set sht = Worksheets.Add(after:=ActiveSheet)
  10.     lRow = 2
  11.     '标题行
  12.     Range("a1").Resize(, UBound(arr, 2)).Value = WorksheetFunction.Index(arr, 1)
  13.     '每一行原始记录
  14.     For i = 2 To UBound(arr)

  15.         strPrefix = Left(arr(i, 1), 2)        '序号前缀
  16.         lSn = Mid(arr(i, 1), 3) '起始序号
  17.         For j = 0 To arr(i, 2) - 1  '重复次数
  18.             For k = 3 To UBound(arr, 2)
  19.                 arr3(j + 1, 1) = strPrefix & lSn + j '3-12列数据写入新数组中
  20.                 arr3(j + 1, k) = arr(i, k) '新序号
  21.             Next
  22.         Next
  23.         arr3(1, 2) = arr(i, 2) '第一行第2列数量
  24.         If j Then
  25.             '写回到工作表中并设置格式
  26.             With Cells(lRow, 1).Resize(j, UBound(arr3, 2))
  27.                 .Value = arr3
  28.                 .Borders(xlDiagonalDown).LineStyle = xlNone
  29.                 .Borders(xlDiagonalUp).LineStyle = xlNone
  30.                 With .Borders
  31.                     .LineStyle = xlContinuous
  32.                 End With
  33.                 .Borders(xlInsideVertical).LineStyle = xlNone
  34.                 .Borders(xlInsideHorizontal).LineStyle = xlNone
  35.             End With
  36.             Erase arr3 '数组清空
  37.             lRow = lRow + j '行号
  38.         End If
  39.     Next
  40.     Application.ScreenUpdating = True
  41.     MsgBox "筛选后的结果在 工作表 " & ActiveSheet.Name & " 中"
  42.     ActiveSheet.Previous.Select
  43. End Sub
复制代码

几万行数据展开

几万行数据展开

数据展开.zip

9.73 KB, 下载次数: 15

发表于 2014-11-3 16:21 | 显示全部楼层
回复

使用道具 举报

发表于 2014-11-3 17:03 | 显示全部楼层
  1. Sub demo()
  2.     Dim arr, arr2
  3.     Dim lRow&
  4.     arr = Range("a1").CurrentRegion
  5.     Dim i&, j&, k&
  6.     Dim arr3(1 To 256, 1 To 12)
  7.     Application.ScreenUpdating = False

  8.     Dim sht As Worksheet
  9.     Set sht = Worksheets.Add(after:=ActiveSheet)
  10.     lRow = 2
  11.     Range("a1").Resize(, UBound(arr, 2)).Value = WorksheetFunction.Index(arr, 1)
  12.     For i = 2 To UBound(arr)
  13.         Dim strPrefix$
  14.         Dim lsn&
  15.         strPrefix = Left(arr(i, 1), 2)
  16.         lsn = Mid(arr(i, 1), 3)
  17.         For j = 0 To arr(i, 2) - 1

  18.             For k = 3 To UBound(arr, 2)
  19.                 arr3(j + 1, 1) = strPrefix & lsn + j
  20.                 arr3(j + 1, k) = arr(i, k)
  21.             Next
  22.         Next
  23.         arr3(1, 2) = arr(i, 2)
  24.         If j Then
  25.             With Cells(lRow, 1).Resize(j, UBound(arr3, 2))
  26.                 .Value = arr3
  27.                 .Borders(xlDiagonalDown).LineStyle = xlNone
  28.                 .Borders(xlDiagonalUp).LineStyle = xlNone
  29.                 With .Borders
  30.                     .LineStyle = xlContinuous
  31.                 End With

  32.                 .Borders(xlInsideVertical).LineStyle = xlNone
  33.                 .Borders(xlInsideHorizontal).LineStyle = xlNone
  34.             End With
  35.             Erase arr3
  36.             lRow = lRow + j
  37.         End If
  38.     Next
  39.     Application.ScreenUpdating = True
  40.     MsgBox "筛选后的结果在 工作表 " & ActiveSheet.Name & " 中"
  41.     ActiveSheet.Previous.Select
  42. End Sub
复制代码
回复

使用道具 举报

发表于 2014-11-3 17:05 | 显示全部楼层
数据展开.rar (23.33 KB, 下载次数: 9)
回复

使用道具 举报

发表于 2014-11-3 17:10 | 显示全部楼层    本楼为最佳答案   
  1. Sub demo()
  2.     Dim arr, arr3(1 To 256, 1 To 12)
  3.     Dim i&, j&, k&, lRow&
  4.     Dim sht As Worksheet
  5.     Dim strPrefix$, lSn&

  6.     '源数据
  7.     arr = Range("a1").CurrentRegion
  8.     Application.ScreenUpdating = False
  9.     Set sht = Worksheets.Add(after:=ActiveSheet)
  10.     lRow = 2
  11.     '标题行
  12.     Range("a1").Resize(, UBound(arr, 2)).Value = WorksheetFunction.Index(arr, 1)
  13.     '每一行原始记录
  14.     For i = 2 To UBound(arr)

  15.         strPrefix = Left(arr(i, 1), 2)        '序号前缀
  16.         lSn = Mid(arr(i, 1), 3) '起始序号
  17.         For j = 0 To arr(i, 2) - 1  '重复次数
  18.             For k = 3 To UBound(arr, 2)
  19.                 arr3(j + 1, 1) = strPrefix & lSn + j '3-12列数据写入新数组中
  20.                 arr3(j + 1, k) = arr(i, k) '新序号
  21.             Next
  22.         Next
  23.         arr3(1, 2) = arr(i, 2) '第一行第2列数量
  24.         If j Then
  25.             '写回到工作表中并设置格式
  26.             With Cells(lRow, 1).Resize(j, UBound(arr3, 2))
  27.                 .Value = arr3
  28.                 .Borders(xlDiagonalDown).LineStyle = xlNone
  29.                 .Borders(xlDiagonalUp).LineStyle = xlNone
  30.                 With .Borders
  31.                     .LineStyle = xlContinuous
  32.                 End With
  33.                 .Borders(xlInsideVertical).LineStyle = xlNone
  34.                 .Borders(xlInsideHorizontal).LineStyle = xlNone
  35.             End With
  36.             Erase arr3 '数组清空
  37.             lRow = lRow + j '行号
  38.         End If
  39.     Next
  40.     Application.ScreenUpdating = True
  41.     MsgBox "筛选后的结果在 工作表 " & ActiveSheet.Name & " 中"
  42.     ActiveSheet.Previous.Select
  43. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-11-3 18:45 | 显示全部楼层
忙好刚刚有空打开论坛,谢谢版主。
回复

使用道具 举报

 楼主| 发表于 2014-11-3 19:48 | 显示全部楼层
hwc2ycy 发表于 2014-11-3 17:10

加注释好啊!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 12:18 , Processed in 0.404937 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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