|
1、对工单产生的订单如果不用计算的话,时间会大幅缩减,大约为原来的一半,1分钟左右就可以运行完成。因此我把原来填写统计数的 F 列改成了文字“有订单”来识别,但我不知道这么修改后,你如何来计算转化率%?2、另一个要求 “同一车辆在24小时内有连续工单,前一个工单作废”,我使用了二次识别的方法。不过从你提供的数据中我还找不到一个这样的例子存在,因此我修改的代码能否正常运行我也没法判断,还要你实际测试;
修改后的代码:
Range(Cells(1, 6), Cells([a10000].End(3).Row, 6)).ClearContents
Cells(1, 6) = "转化率"
Application.ScreenUpdating = False
Dim arr
arr = Worksheets("订单").[a2:c25694]
For i = 2 To [a10000].End(3).Row
s1 = Cells(i, 2)
s2 = Cells(i, 4)
js = 0
bz = False
For k = 1 To UBound(arr)
If (arr(k, 1) = s1) And (DateDiff("n", s2, arr(k, 2)) <= 1440) And (arr(k, 3) <> "#") Then
js = js + 1
arr(k, 3) = "#"
bz = True '这是新增的,当找到第一个符合条件的订单,就立即终止检索,时间比原来更快的原因就在这里
Exit For
End If
Next k
If bz Then
Cells(i, 6) = "有订单" '只要有一个订单就记录 “有订单”,订单数量会被忽略
Else
Cells(i, 6) = ""
End If
Next i
'下面的代码是做二次识别
Dim arr1
arr1 = Range(Cells(2, 2), Cells([a10000].End(3).Row, 4))
For i = 1 To UBound(arr1)
s1 = arr1(i, 1)
s2 = arr1(i, 3)
For k = i + 1 To UBound(arr1)
If (arr1(k, 1) = s1) And (DateDiff("n", s2, arr1(k, 3)) <= 1440) Then '对“工单“做全检索,同一车辆在24小时内有任何重复工单,前一个工单的记录会被更改。比如如果同一车辆有4笔工单,目标是前三笔作废,只保留最后一笔工单
Cells(i + 1, 8) = IIf(Cells(i + 1, 7) = "有订单", "无效订单", "") '标签文字“无效订单”会被填在G列,原来记录的 F 列维持不变,因为我不确定这个代码是否能被正确执行。一旦你确认,你可以把这个代码按自己的要求做调整
End If
Next k
Next i
Application.ScreenUpdating = True
|
|