VBA累计日期

 

 

 1 Sub count_date()
 2 '计算所有天数,并对日期去重
 3 Dim dic As Object
 4 Dim arr() As Variant
 5 Dim d As Date
 6 Dim cols As Integer
 7 
 8 '选5列:1条件列,2开始日期,3结束日期,4,第一列出现次数,5累计天数
 9 arr = Selection
10 cols = UBound(arr, 2)
11 Debug.Print cols
12 For i = 1 To UBound(arr, 1)  '大循环
13         Set dic = CreateObject("scripting.dictionary")
14     n = 0
15     For j = 1 To UBound(arr, 1) '小循环
16 
17         If arr(j, 1) = arr(i, 1) Then  '找到同名行
18             For d = arr(j, 2) To arr(j, 3) '累计日期
19 '字典的键名不能重复,使得d重复输入无效,起到去重日期的效果。
20                 dic(d) = d
21             Next
22             n = n + 1
23         End If
24 '如果没有选第四列,删除此if和n
25         If n > arr(i, 4) Then
26             Exit For
27         End If
28     Next
29     arr(i, cols) = dic.Count
30 Next
31 'WorksheetFunction.Index(数组, 行数, 列数),"0"代表整行或整列
32 Selection.Columns(cols) = WorksheetFunction.Index(arr, 0, cols)
33 End Sub

 

posted @ 2022-12-22 01:06  瑜之家  阅读(173)  评论(0)    收藏  举报