You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于订单行数分配取货时间的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:47:27