虽然没有看到你的数据全貌,但本问题用数据透视表无疑是最合适的。如图,拖动几下鼠标就把数据按日按姓名分别汇总了。如果把姓名拖到最前面,就可以对每个人一个月的数量汇总,极为方便。
把问题作为内容(邮件主题一定要包含“excel”,本人以此为依据辨别非垃圾邮件,以免误删),excel样表文件(把现状和目标效果表示出)作为附件发到yqch134@163.com帮你看下
假定你现在的表为sheet1,在sheet2里,在A列从A2开始输入所有员工姓名,在第1行从B1开始输入当月每天日期,B2输入公式=COUNTlFS(Sheet1!$A:$A,B$1&″*″,sheet1!$B:$B,$A2),公式向右拉完再向下拉。统计出来大于0那一天就是上了班的。
vba很容易自动完成……
方法有很多
VBA宏自定义函数代码:
'A=查找人的名字,B=查询后开始写入的第一个单元对象
Function 找人(A As String, B As Range)
Dim C As Range, i As Long, D As Object, T As Date
Set D = CreateObject("Scripting.Dictionary")
'循环B列单元对象至最后一行
For Each C In Range("B1:B" & Range("B65536").End(xlUp).Row)
'如果循环对象的文本等于查找人的名字,则写入对象右边i列=循环对象左边单元对象
If C.Text = A Then
T = C(0, -1) 'T=循环对象左边(日期列)值
If Not D.exists(T) Then '主要用于排除重复项
D(T) = T
B(0, i).Text = T
i = i + 1
End If
End If
Next
Set D = Nothing
End Function
上面代码没测试,大致意思都到位,应该没问题。如有问题私密联系