Excel精英培训网

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

“如何补足缺少考勤的日期”中数组和字典代码解释(二)

[复制链接]
发表于 2011-2-26 00:01 | 显示全部楼层 |阅读模式
具体问题见:http://www.excelpx.com/thread-162318-1-1.html
这是检查加班情况的代码(数组+字典),相对简单一些,供初学者参考。附件见检查缺勤情况的代码:
http://www.excelpx.com/forum.php?mod=viewthread&tid=162751&page=1#pid2495143


  1. Sub 检查加班情况()
  2. Dim WSa As Worksheet, WSb As Worksheet '定义各种变量
  3. Dim d As Object
  4. Dim i As Long, j As Long, n As Long
  5. Dim LastRowA As Long, LastRowB As Long
  6. Dim arr1, arr2, brr()
  7. Dim Myname
  8.   On Error Resume Next '容错处理
  9.   Set d = CreateObject("Scripting.Dictionary") '定义字典d
  10.   Set WSa = Sheets("应工作日期") '设置WSa为"应工作日期"工作表
  11.   Set WSb = Sheets("现工作日期") '设置WSb为"现工作日期"工作表
  12.   LastRowA = WSa.Cells(Rows.Count, 1).End(xlUp).Row '计算"应工作日期"工作表中A列数据最后一行行数
  13.   LastRowB = WSb.Cells(Rows.Count, 3).End(xlUp).Row '计算"现工作日期"工作表中A列数据最后一行行数
  14.   arr1 = WSa.Range("A2:A" & LastRowA) '定义"应工作日期"工作表中A列数据区为arr1数组
  15.   arr2 = WSb.Range("C2:D" & LastRowB) '定义"现工作日期"工作表中C和D列数据区为arr2数组
  16.   For i = 1 To UBound(arr2) '提取"现工作日期"工作表C列不重复“姓名”数据
  17.     d(arr2(i, 1)) = ""
  18.   Next i
  19.   For Each Myname In d.keys '对于每个姓名而言,
  20.     For j = 1 To UBound(arr1)
  21.       d(Myname & arr1(j, 1)) = ""
  22.            '与"应工作日期"工作表中A列数据区数据一一组合——
  23.                      '产生一个“姓名&日期”不重复组合数据——记录每个员工必须出勤的情况
  24.     Next j
  25.   Next
  26.       '下面比较应出勤情况(d)与现有记录的员工出勤情况
  27.   For i = 1 To UBound(arr2)
  28.     If Not d.exists(arr2(i, 1) & arr2(i, 2)) Then '如果“现有记录”中有记录,但“应出勤记录”中并没有找到——这就是加班记录
  29.       n = n + 1 '计数
  30.       ReDim Preserve brr(1 To 2, 1 To n) '动态定义数组brr——记录相应的加班记录
  31.       brr(1, n) = arr2(i, 1) '加班姓名记录
  32.       brr(2, n) = arr2(i, 2) '加班日期记录
  33.     End If
  34.   Next i
  35.   WSb.Range("I2:J" & Rows.Count) = "" '清空原来的记录
  36.   WSb.Range("I2").Resize(UBound(brr, 2), 2) = Application.Transpose(brr) '显示加班记录
  37.   Set d = Nothing
  38. End Sub
复制代码

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-3-2 16:42 | 显示全部楼层
回复

使用道具 举报

发表于 2022-6-4 16:58 | 显示全部楼层
回复

使用道具 举报

发表于 2022-10-5 20:54 | 显示全部楼层
谢谢分享,写的好详细,新手看着很给力,万分感谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 21:26 , Processed in 0.218001 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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