VBA-循环行并根据条件插入值

时间:2018-09-17 10:35:03

标签: excel vba excel-vba excel-2016

我的问题是关于excel VBA循环的。我希望循环在某些单元格值更改时从头开始填充结果。

我编写了一个宏来根据条件循环行并插入值,但是在添加其他条件以在单元格值更改时再次开始循环时遇到了困难。

条件编号1 =应该在订单日期时间超过21:00小时时开始计算时间窗口,但是我想循环直到新日期到来,并在下一个日期为21时从头开始再次填充窗口时间:00

考虑1个受让人可以在1小时内处理10个订单,而2个受让人可以在1小时内处理20个订单,依此类推。...

Sub EstimatedTimeWindow()
Dim i as long, n as long,
Dim x as double
Dim p as long

    No_of_Orders = 20
    No_of_Assignee  = 2
    OrdersinHour = No_of_Orders  * No_of_Assignee

   Worksheets("final_data").select
   n = cells(rows.count,"A").end(xlup).row
   p = 0

   For i = 2 to n
   x = (1* cells(i,"A")/1)) - Int(Cells(i,"A")) 'to check the time
  If x >= 0.875 'time as 21:00
     p = p + 1
       If p <= OrdersinHour Then
          Cells(i,"B") = "Estimated window time 21:00 - 22:00"
       End If
       If p > OrdersinHour AND p <= OrdersinHour * 2 Then
          Cells(i,"B") = "Estimated window time 22:00 - 23:00"
       End if
       If p > OrdersinHour AND p <= OrdersinHour * 3 Then
          Cells(i,"B") = "Estimated window time 23:00 - 00:00"
       End if
       If p > OrdersinHour AND p <= OrdersinHour * 4 Then
          Cells(i,"B") = "Estimated window time 00:00 - 01:00"
       End if
  End if
Next
End Sub

sample_image

1 个答案:

答案 0 :(得分:1)

误解了这个问题:我在下面留下了这个答案,但是可以忽略不计。更新的答案添加到开头:

请勿将日期从x中删除-然后,当单元格中的日期与上一个行的日期不同时,请将p重置为0

For i = 2 to n
    If Int(I) <> Int(cells(I,1).Value Then 'Order Date has changed day
        p = 0 'Reset counter p to 0
    End If
    x = cells(i,1).Value 'to check the time
    If (x mod 1) >= 0.875 'time as 21:00
'Continue as normal

您可以在特定时间使用Application.OnTime调用宏-但是,如果您关闭工作簿但将Excel保持打开状态,则重新打开工作簿以运行宏,除非您禁用了OnTime。变得...混乱。

更好的解决方案是在工作表上的值更改时使用Worksheet_Change事件运行代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Columns(1)) Is Nothing Then 'A Cell in Column A changed
        Call EstimatedTimeWindow
    End If
End Sub

此外,快速调整现有代码:x = Cells(i, 1).Value Mod 1将为您提供更清晰的代码,Hour语句比0.875更容易阅读,而{{ 1}}也会使您的代码更简洁:

Switch