ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用vba代码获取同一人在同一天同一小时中签到的最后时间记录?

如何用vba代码获取同一人在同一天同一小时中签到的最后时间记录?

作者:绿色风 分类: 时间:2022-08-17 浏览:98
楼主
kevinchengcw
Q: 如何用vba代码获取同一人在同一天同一小时中签到的最后时间记录?
A: 代码如下:
  1. Sub test()
  2. Dim Rng As Range, Dic As Object, N&, I%, Arr, Str$, Result
  3. Set Dic = CreateObject("scripting.dictionary")  '创建字典项目
  4. Set Rng = [b2]  '设定数据区左上角位置,如果表格位置不固定,此处可以用find方式查找左上角特征字符单元格位置
  5. Arr = Range(Rng, Cells(Cells(Rows.Count, Rng.Column).End(3).Row, Cells(Rng.Row, Columns.Count).End(1).Column)).Value2  '取得表格区域数据
  6. ReDim Result(LBound(Arr, 2) To UBound(Arr, 2), 1 To 1)  '重定义结果数组
  7. For N = LBound(Arr) To UBound(Arr)  '循环数据区
  8.     If Trim(Arr(N, 1)) <> "" Then  '如果数据有效,则
  9.         Str = Trim(Arr(N, 1)) & vbTab & Format(Arr(N, 4), "yyyymmddhh")  '将人名与签到数据(年月日时)组合成key,保证同一人同一天同一小时里面唯一组合
  10.         If Dic.exists(Str) Then  '如果已存在该项目,进一步判断时间是否更靠后(数值更大),如果大则替换现有数据
  11.             If Arr(N, 4) > Result(4, Dic(Str)) Then Result(4, Dic(Str)) = Arr(N, 4)  
  12.         Else  '否则将当前数据行写入结果数组中
  13.             For I = LBound(Arr, 2) To UBound(Arr, 2)
  14.                 Result(I, UBound(Result, 2)) = Arr(N, I)
  15.             Next I
  16.             Dic.Add Str, UBound(Result, 2)  '将当前数据项内容添加到字典中
  17.             ReDim Preserve Result(LBound(Result) To UBound(Result), LBound(Result, 2) To UBound(Result, 2) + 1)  '为数组增加一列
  18.         End If
  19.     End If
  20. Next N
  21. With [j2]  '设置输出结果区左上角单元格
  22.     For N = LBound(Result) To UBound(Result)  '利用循环输出(数量少也可用transpose方式输出)
  23.         For I = LBound(Result, 2) To UBound(Result, 2)
  24.             If N = 4 Then  '如果是时间列,定义单元格格式后再输出
  25.                 With .Offset(I - 1, N - 1)
  26.                     .NumberFormatLocal = "yyyy/mm/dd hh:mm"
  27.                     .Value = Result(N, I)
  28.                 End With
  29.             Else
  30.                 .Offset(I - 1, N - 1) = Result(N, I)
  31.             End If
  32.         Next I
  33.     Next N
  34. End With
  35. Set Dic = Nothing  '清空字典项目
  36. End Sub
详见附件及素材源帖.
Demo.rar
2楼
yaoandxu2011
要是我也会VBA就好了

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap