Excel精英培训网

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

[已解决]请问如何通过VBA实现帖子当中所要求的排序?

[复制链接]
发表于 2014-3-4 13:56 | 显示全部楼层 |阅读模式
18学分
文件中有两个excel文件“表1、表2”(如下图):

01.jpg

表格1中的内容格式如下:

02.jpg

表格2中的内容格式如下:

03.jpg

我想让表格2按照“地址编号”调整顺序,使得表格2中的“地址编号”先后顺序与他们在表格1中的相同,请问如何通过VBA实现呢?

对比排序.rar (12.95 KB, 下载次数: 10)

最佳答案

查看完整内容

………………
发表于 2014-3-4 13:56 | 显示全部楼层    本楼为最佳答案   
………………

对比排序.zip

20.85 KB, 下载次数: 4

回复

使用道具 举报

发表于 2014-3-4 15:55 | 显示全部楼层
本帖最后由 独奏 于 2014-3-4 19:12 编辑

新手练手,请先保存好副本
忘记了说一下,我把合并的单元格都拆分了并填上相应的序号和名称
  1. Sub text()
  2. Dim br, arr, brr, crr(), wb, r, c, x, y
  3. Set wb = Workbooks.Open(ThisWorkbook.Path & "\表1.xls")
  4.     With wb
  5.     arr = .Sheets("sheet1").Range("a1").CurrentRegion
  6.     br = Workbooks("表2.xls").Sheets("sheet1").Range("a1:j1")
  7.     brr = Workbooks("表2.xls").Sheets("sheet1").Range("a1").CurrentRegion
  8.         For r = 2 To UBound(arr)
  9.             For x = 2 To UBound(brr)
  10.                 If brr(x, 2) = arr(r, 2) Then
  11.                     n = n + 1
  12.                     ReDim Preserve crr(1 To 10, 1 To n)
  13.                     For y = 1 To UBound(brr, 2)
  14.                         crr(y, n) = brr(x, y)
  15.                     Next
  16.                 End If
  17.             Next
  18.         Next
  19.     End With
  20. Workbooks("表2.xls").Sheets("sheet2").Range("a1").Resize(, 10) = br
  21. Workbooks("表2.xls").Sheets("sheet2").Range("a2").Resize(n, 10) = Application.Transpose(crr)
  22. set arr=nothing
  23. set brr=nothing
  24. erase crr
  25. End Sub
复制代码

评分

参与人数 1 +2 收起 理由
shenlong2006 + 2 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2014-3-4 19:48 | 显示全部楼层
这个不拆分单元格的也可以试试,请保存好副本
  1. Sub test()
  2. Dim arr()
  3. Set wb = Workbooks.Open(ThisWorkbook.Path & "\表1.xls")
  4. With wb
  5. brr = .Sheets("sheet1").Range("a1").CurrentRegion
  6. End With
  7. ThisWorkbook.Activate
  8. With Workbooks("表2.xls").Sheets(1)
  9. For y = 2 To UBound(brr)
  10.     For r = 2 To 89
  11.         If brr(y, 2) = .Cells(r, 2) Then
  12.             If Cells(r, 2).MergeCells Then
  13.                 For x = r To r + .Cells(r, 2).MergeArea.Rows.Count - 1
  14.                     n = n + 1
  15.                     ReDim Preserve arr(1 To 10, 1 To n)
  16.                     For i = 1 To 10
  17.                         arr(i, n) = .Cells(x, i)
  18.                     Next
  19.                 Next
  20.                 r = x
  21.             End If
  22.         End If
  23.     Next
  24. Next
  25. End With
  26. Workbooks("表2.xls").Sheets(2).Range("a1").Resize(n, 10) = Application.Transpose(arr)
  27. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
shenlong2006 + 3 赞一个!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 11:26 , Processed in 2.093701 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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