基于订单行数分配取货时间的VBA代码实现问询
订单取货时间分配VBA实现
以下是完全符合你需求的VBA代码,覆盖所有场景的时间分配规则:
Sub AssignPickupTimes() Dim lastRow As Long Dim i As Long Dim timeOptions As Variant Dim timeIndex As Integer ' 获取A列最后一行的订单行数 lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' 场景1:0<行数≤4,全部分配"4am" If lastRow > 0 And lastRow <= 4 Then For i = 1 To lastRow Range("B" & i).Value = "4am" Next i ' 场景2:4<行数≤10,至少4行"4am",剩余"6pm" ElseIf lastRow > 4 And lastRow <= 10 Then ' 前4行设为"4am" For i = 1 To 4 Range("B" & i).Value = "4am" Next i ' 剩下的行设为"6pm" For i = 5 To lastRow Range("B" & i).Value = "6pm" Next i ' 场景3:行数>10,均匀分配三个时间值 ElseIf lastRow > 10 Then timeOptions = Array("4am", "12pm", "6pm") timeIndex = 0 For i = 1 To lastRow Range("B" & i).Value = timeOptions(timeIndex) ' 循环切换时间,保证均匀分配 timeIndex = (timeIndex + 1) Mod 3 Next i End If End Sub
代码说明
- 场景1:遍历所有订单行,统一写入"4am",替换了你原来的部分逻辑,更完整可靠
- 场景2:先给前4行分配"4am"(满足至少4行的要求),剩下的行全部用"6pm"
- 场景3:用数组存三个时间值,通过取模运算循环切换,让三个时间尽可能均匀分配(比如11行的话,4个"4am"、4个"12pm"、3个"6pm",是最接近均匀的分配方式)
使用提示
- 订单数据要放在A列,时间会自动写入B列
- 运行前确认当前工作表是订单所在表,避免写错位置
- 如果想调整时间分配的顺序,直接修改
timeOptions数组里的元素顺序就行
内容的提问来源于stack exchange,提问作者doodlejump
相关产品推荐
相关产品推荐

