Excel精英培训网

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

[已解决]求帮助,写一个SUB宏命令.

[复制链接]
发表于 2017-7-9 23:42 | 显示全部楼层 |阅读模式
过程都在附件中写了,这里也不知道怎么描述,麻烦有时间的大神,帮忙看看.成分感谢.
最佳答案
2017-7-10 09:32
  1. Private Sub CommandButton1_Click()
  2. Dim r, Arr, i, j
  3. Application.ScreenUpdating = False
  4. Set d = CreateObject("Scripting.Dictionary")
  5. With Worksheets("Sheet3")
  6.     Arr = Worksheets("表格1").[A1].CurrentRegion
  7.     For j = 2 To UBound(Arr)
  8.         d(Arr(j, 4)) = j
  9.     Next
  10.     r = .Range("A65536").End(xlUp).Row
  11.     For i = 2 To r
  12.         .Cells(i, 8) = .Cells(i, 1) & "-" & .Cells(i, 3)
  13.         If d.exists(.Cells(i, 8).Value) Then
  14.             j = d(.Cells(i, 8).Value)
  15.             .Cells(i, 10) = Arr(j, 6)
  16.             .Cells(i, 11) = Arr(j, 9)
  17.         End If
  18.         .Cells(i, 9) = .Cells(i, 10) & "," & .Cells(i, 2)
  19.     Next
  20. End With
  21. Application.ScreenUpdating = True
  22. End Sub
复制代码

工作表.rar

42.44 KB, 下载次数: 12

发表于 2017-7-10 09:32 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub CommandButton1_Click()
  2. Dim r, Arr, i, j
  3. Application.ScreenUpdating = False
  4. Set d = CreateObject("Scripting.Dictionary")
  5. With Worksheets("Sheet3")
  6.     Arr = Worksheets("表格1").[A1].CurrentRegion
  7.     For j = 2 To UBound(Arr)
  8.         d(Arr(j, 4)) = j
  9.     Next
  10.     r = .Range("A65536").End(xlUp).Row
  11.     For i = 2 To r
  12.         .Cells(i, 8) = .Cells(i, 1) & "-" & .Cells(i, 3)
  13.         If d.exists(.Cells(i, 8).Value) Then
  14.             j = d(.Cells(i, 8).Value)
  15.             .Cells(i, 10) = Arr(j, 6)
  16.             .Cells(i, 11) = Arr(j, 9)
  17.         End If
  18.         .Cells(i, 9) = .Cells(i, 10) & "," & .Cells(i, 2)
  19.     Next
  20. End With
  21. Application.ScreenUpdating = True
  22. End Sub
复制代码

工作表.zip

54.01 KB, 下载次数: 7

评分

参与人数 1 +1 收起 理由
falcon9999 + 1 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

发表于 2017-7-10 11:19 | 显示全部楼层
第一步:把表格1的F列表头" Nbr.", 去掉空格和点号,改为Nbr (附件里已改好)
第二步:点击即可。
QQ截图20170710111741.png

工作表.rar

49.51 KB, 下载次数: 3

回复

使用道具 举报

发表于 2017-7-10 11:20 | 显示全部楼层
主要是因为列字段" Nbr."含空格和点号后,无法作为列字段提取,哪怕是用[]也不行。。。。。。
回复

使用道具 举报

 楼主| 发表于 2017-7-10 12:28 | 显示全部楼层

非常感谢您的帮助,又跟您学习了.另外请教一下,With Worksheets("sheet3"),这句可以改为当前表格,或任意表格吗?

回复

使用道具 举报

 楼主| 发表于 2017-7-10 12:31 | 显示全部楼层
grf1973 发表于 2017-7-10 11:19
第一步:把表格1的F列表头" Nbr.", 去掉空格和点号,改为Nbr (附件里已改好)
第二步:点击即可。

感谢您在百忙中的帮助,生命中愿意帮助我的人,都 是我的贵人.再次表示感谢.
回复

使用道具 举报

发表于 2017-7-10 12:32 | 显示全部楼层
falcon9999 发表于 2017-7-10 12:28
非常感谢您的帮助,又跟您学习了.另外请教一下,With Worksheets("sheet3"),这句可以改为当前表格,或任意表 ...

With Worksheets("sheet3")
改成当前工作表
With Activesheet
改成别的工作
With Worksheets("sheet3")  红色的修改为工作表名称
回复

使用道具 举报

 楼主| 发表于 2017-7-12 20:26 | 显示全部楼层
老师您好.今天再使用您帮我做的这个命令时,发现一个问题,就是当B列的数字为三位数时,组合到K列,就显示不对了.


截图.jpg
回复

使用道具 举报

发表于 2017-7-12 21:16 | 显示全部楼层
falcon9999 发表于 2017-7-12 20:26
老师您好.今天再使用您帮我做的这个命令时,发现一个问题,就是当B列的数字为三位数时,组合到K列,就显示不对 ...

我晚点上来给你看看
回复

使用道具 举报

发表于 2017-7-12 22:54 | 显示全部楼层
falcon9999 发表于 2017-7-12 20:26
老师您好.今天再使用您帮我做的这个命令时,发现一个问题,就是当B列的数字为三位数时,组合到K列,就显示不对 ...

你把I列的单元格格式改为文本格式就OK了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 08:28 , Processed in 0.351178 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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