Excel精英培训网

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

[已解决]求助!如何追加人员信息

[复制链接]
发表于 2015-12-25 13:40 | 显示全部楼层 |阅读模式
根据“学号”,将【追加信息】里的J列至U列的数据自动对应到【信息总库】的CA列至CL列,达到现在这个效果


因为原表有几千条人员信息,请用VB实现,{:25:}

最佳答案
2015-12-28 15:11
  1. Sub Macro1()
  2. Dim arr, brr, d, i&, j%, n&, sht As Worksheet
  3. Set d = CreateObject("scripting.dictionary")
  4. Set sht = Sheets("信息总库")
  5. arr = sht.Range("b5").CurrentRegion
  6. brr = Sheets("追加信息").Range("a13").CurrentRegion
  7. For i = 2 To UBound(brr)
  8.     d(brr(i, 5)) = i
  9. Next
  10. For i = 2 To UBound(arr)
  11.     If d.exists(arr(i, 3)) Then
  12.         n = d(arr(i, 3))
  13.         For j = 10 To 21
  14.             sht.Cells(i + 4, j + 69) = brr(n, j)
  15.         Next
  16.     End If
  17. Next
  18. End Sub
复制代码

人员信息表qiuzu20151225.rar

142.86 KB, 下载次数: 8

发表于 2015-12-25 14:39 | 显示全部楼层
附件

人员信息表qiuzu20151225.zip

176.12 KB, 下载次数: 4

回复

使用道具 举报

 楼主| 发表于 2015-12-25 14:50 | 显示全部楼层
baksy 发表于 2015-12-25 14:39
附件

非常感谢你这么快就回复!{:25:}

但你这是用函数公式调用的形式,

我是想要用VB的形式,因为实际数据量很大,用函数复制公式很麻烦,容易不小心搞错!

求用VB写段代码,用一个“按钮”实现
回复

使用道具 举报

发表于 2015-12-25 16:15 | 显示全部楼层
  1. Sub Macro1()
  2. Dim arr, brr, crr, d, i&, j%, n&
  3. Set d = CreateObject("scripting.dictionary")
  4. [ca6:cl20000] = ""
  5. arr = Range("b5").CurrentRegion
  6. brr = Sheets("追加信息").Range("a13").CurrentRegion
  7. ReDim crr(1 To UBound(arr) - 1, 1 To 12)
  8. For i = 2 To UBound(brr)
  9.     d(brr(i, 5)) = i
  10. Next
  11. For i = 2 To UBound(arr)
  12.     If d.exists(arr(i, 3)) Then
  13.         n = d(arr(i, 3))
  14.         For j = 10 To 21
  15.             crr(i - 1, j - 9) = brr(n, j)
  16.         Next
  17.     End If
  18. Next
  19. Range("ca6").Resize(UBound(crr), UBound(crr, 2)) = crr
  20. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
kawashaki8899 + 1 很给力

查看全部评分

回复

使用道具 举报

发表于 2015-12-25 16:19 | 显示全部楼层
………………

人员信息表qiuzu20151225.zip

174.03 KB, 下载次数: 10

评分

参与人数 1 +1 收起 理由
kawashaki8899 + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-12-25 16:41 | 显示全部楼层
dsmch 发表于 2015-12-25 16:19
………………

{:25:}
先谢谢了,回去看看效果
回复

使用道具 举报

 楼主| 发表于 2015-12-28 10:16 | 显示全部楼层
dsmch 发表于 2015-12-25 16:19
………………

再次感谢!
测试后发现一个问题,按动“追加数据按钮”后,对应学号的数据已经能写到“信息总库”对应人员,但同时把“这次没在追加数据表中出现人员的CA列至CL列原来的内容”给删除了

实际上“追加数据”表会多次更新,每次更新点“追加数据按钮”后把当前“追加数据”表中的数据更新到“信息总库”对应人员处

可能我之前没表达清楚,不好意思!
请抽空帮我再看看好吗?谢谢



回复

使用道具 举报

发表于 2015-12-28 10:36 | 显示全部楼层
  1. Sub Macro1()
  2. Dim arr, brr, d, i&, j%, n&
  3. Set d = CreateObject("scripting.dictionary")
  4. [ca6:cl20000] = ""
  5. arr = Range("b5").CurrentRegion
  6. brr = Sheets("追加信息").Range("a13").CurrentRegion
  7. For i = 2 To UBound(brr)
  8.     d(brr(i, 5)) = i
  9. Next
  10. For i = 2 To UBound(arr)
  11.     If d.exists(arr(i, 3)) Then
  12.         n = d(arr(i, 3))
  13.         For j = 10 To 21
  14.             Cells(i + 4, j + 69) = brr(n, j)
  15.         Next
  16.     End If
  17. Next
  18. End Sub
复制代码
回复

使用道具 举报

发表于 2015-12-28 10:44 | 显示全部楼层
或这样……
  1. Sub Macro1()
  2. Dim arr, brr, crr(1 To 12), d, i&, j%, n&
  3. Set d = CreateObject("scripting.dictionary")
  4. [ca6:cl20000] = ""
  5. arr = Range("b5").CurrentRegion
  6. brr = Sheets("追加信息").Range("a13").CurrentRegion
  7. For i = 2 To UBound(brr)
  8.     d(brr(i, 5)) = i
  9. Next
  10. For i = 2 To UBound(arr)
  11.     If d.exists(arr(i, 3)) Then
  12.         n = d(arr(i, 3))
  13.         For j = 10 To 21
  14.             crr(j - 9) = brr(n, j)
  15.         Next
  16.         Cells(i + 4, "ca").Resize(1, 12) = crr
  17.     End If
  18. Next
  19. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-12-28 11:12 | 显示全部楼层
dsmch 发表于 2015-12-28 10:44
或这样……

这么快就给了2个方案,太好了,我去试试!,谢谢!谢谢!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 12:42 , Processed in 0.382485 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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