我想实现减少返回计数
我有两片循环执行时间:“仪表盘”和“临时计算”。
仪表板包含所有员工详细信息和范围“N1”“N2”包含日期。
现在一个宏填充员工数据并生成如下图所示的日历日历 'temp calc'的项目详细信息包含开始日期结束日期(日期不在n1和n2日期之间)表格在这里被删除)。
因此,现在通过仪表板表引用他们的empid,并使用第一天填充在仪表板表中,我通过temp计算表中的emp id循环并返回一个员工当前正在为特定天。如下图所示。
我如何做到这一点:
代码.....
Option Explicit
Sub Count()
' x= no of columns(dashboard calender)
' y= no of rows(dashboard emp id)
' z= no of rows(temp calc sheet emp id)
Application.ScreenUpdating = False
'Clear calender data
Range("Q4").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.ClearContents
Dim i, j, k, l, d, x, y, z, Empid As Long
Dim currentdate, startdate, enddate As Date
x = (Range("n2") - Range("n1")) + 1
y = Application.WorksheetFunction.counta(Range("A:A")) - 1
z = Application.WorksheetFunction.counta(Worksheets("Temp Calc").Range("A:A")) - 1
For i = 1 To y Step 1 'To loop through the emp_id in dashboard.
For j = 1 To x Step 1 'To loop through the calender in dashboard daywise.
d = 0
For k = 1 To z Step 1 'To loop through the emp_id i temp calc sheet.
Empid = ActiveSheet.Cells(i + 3, 1).Value
currentdate = Cells(3, 16 + j).Value
startdate = Worksheets("Temp calc").Cells(k + 1, 3).Value
enddate = Worksheets("Temp calc").Cells(k + 1, 4).Value
If (Worksheets("Temp calc").Cells(k + 1, 1).Value) = Empid Then
If (currentdate >= startdate) And (currentdate <= enddate) Then 'To check whether the first column date falls within the project start and end date
d = d + 1
End If
End If
Next
Worksheets("Dashboard").Cells(i + 3, j + 16) = d
Next
Next
Range("q4").Select
Application.ScreenUpdating = True
End Sub
我的问题:的代码做这项工作,但我有两个问题。
实在是太慢了
有时,工作簿会说没有响应,并不会做work.I've检查它不会在后台工作。我让程序在一夜之间运行,并且没有响应。
可能的解决方案:
使用两个阵列:一个阵列到EMPID存储在仪表盘,仪表板中产生的第二阵列来存储日历。然后将它与温度计算表中的数据进行比较,并将计数返回到数组编号2并将其写回 问题是我刚开始阅读有关数组,我仍在学习
我对可能的替代方法开放:
欢呼声,
马修
IM将改变我的计数功能,感谢弗洛里斯 关于数据透视表我想保存我的数据,因为我的工作簿看起来有很多数据列旁边我的员工,我需要参考 我已经在员工上排序它,但是因为您的方法表明生病找出一些方法去到下一个员工,这将减少我的循环执行时间 虐待自动筛选方法 感谢您的建议 – mathew
在旁边说明你仍然可以截图和你的通知。因为我不能,只想确认该网站是否有问题或只是我:| – mathew
不知道我理解你最后的评论?我可以看到你的截图,并收到通知,如果这是你问的。 – Floris