Excel精英培训网

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

[已解决]用vba实现自动汇总缺席情况

[复制链接]
发表于 2014-8-14 12:06 | 显示全部楼层 |阅读模式
用vba实现自动汇总缺席情况
最佳答案
2014-8-14 12:58
  1. Sub Macro1()
  2. On Error Resume Next
  3. Dim arr, brr(1 To 10000, 1 To 3)
  4. Dim i%, j&, k%, s&, zf$$, zf1$$
  5. [e2:h10000].ClearContents
  6. zf = [a2] & "," & [b2] & "," & [c2]
  7. For i = 2 To 3
  8.     arr = Sheets(i).Range("a1").CurrentRegion
  9.     For j = 2 To UBound(arr)
  10.         zf1 = arr(j, 1) & "," & arr(j, 2) & "," & arr(j, 3)
  11.         If zf = zf1 Then
  12.             s = s + 1
  13.             For k = 5 To 7
  14.                 brr(s, k - 4) = arr(j, k)
  15.             Next
  16.         End If
  17.     Next
  18. Next
  19. [e2].Resize(s, 3) = brr
  20. [h2] = s
  21. End Sub
复制代码

自动汇总缺席情况.rar

5.11 KB, 下载次数: 7

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-8-14 12:58 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. On Error Resume Next
  3. Dim arr, brr(1 To 10000, 1 To 3)
  4. Dim i%, j&, k%, s&, zf$$, zf1$$
  5. [e2:h10000].ClearContents
  6. zf = [a2] & "," & [b2] & "," & [c2]
  7. For i = 2 To 3
  8.     arr = Sheets(i).Range("a1").CurrentRegion
  9.     For j = 2 To UBound(arr)
  10.         zf1 = arr(j, 1) & "," & arr(j, 2) & "," & arr(j, 3)
  11.         If zf = zf1 Then
  12.             s = s + 1
  13.             For k = 5 To 7
  14.                 brr(s, k - 4) = arr(j, k)
  15.             Next
  16.         End If
  17.     Next
  18. Next
  19. [e2].Resize(s, 3) = brr
  20. [h2] = s
  21. End Sub
复制代码
回复

使用道具 举报

发表于 2014-8-14 13:00 | 显示全部楼层
………………

自动汇总缺席情况.zip

13.14 KB, 下载次数: 29

回复

使用道具 举报

 楼主| 发表于 2014-8-14 16:45 | 显示全部楼层
太感谢了,高手呀!
回复

使用道具 举报

 楼主| 发表于 2014-8-14 16:48 | 显示全部楼层
能解释一下设计思路吗?
我看不懂
回复

使用道具 举报

发表于 2014-8-14 19:43 | 显示全部楼层
  1. Sub Macro1()
  2. On Error Resume Next '容错处理
  3. Dim arr, brr(1 To 10000, 1 To 3)
  4. Dim i%, j&, k%, s&, zf$$, zf1$$
  5. [e2:h10000].ClearContents '预先清空
  6. zf = [a2] & "," & [b2] & "," & [c2] '连接字符
  7. For i = 2 To 3 '循环工作表2、3
  8.     arr = Sheets(i).Range("a1").CurrentRegion '赋值数组arr
  9.     For j = 2 To UBound(arr) '循环数组
  10.         zf1 = arr(j, 1) & "," & arr(j, 2) & "," & arr(j, 3) '第1-3列连接成字符串
  11.         如果字符zf1和zf相同则
  12.         If zf = zf1 Then
  13.             s = s + 1 '计数
  14.             For k = 5 To 7 '数组arr第5-7列赋值给数组brr
  15.                 brr(s, k - 4) = arr(j, k)
  16.             Next
  17.         End If
  18.     Next
  19. Next
  20. [e2].Resize(s, 3) = brr '赋值
  21. [h2] = s
  22. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 22:33 , Processed in 0.332359 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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