Excel宏 - 舍入日期最接近月份的第1天或第15天

时间:2014-05-02 21:22:32

标签: excel excel-vba date vba

背景故事:

我正在为客户开发一个销售订阅产品的网站,该产品将在本月1日和15日分批发货。她将把订单发送到她的履行机构并且不太精通技术,所以我需要为她编写一个宏,它将自动删除不属于当前货件的订单导出csv文件中的任何行,即删除订阅已过期的订单和旧的非订购订单。订单导出将始终包含所有时间的订单。

我必须使用的数据:

  • 订购创建日期 - 订单时间戳
  • 订阅长度 - 订阅可用3,6,9或12个月(她还出售非订阅项目,其长度为0)

我想用宏创建的数据:

  • BATCH DATE(发货日期将会出来)
  • 最后一批(最后一批货将会出货)

我认为宏如何运作:

  1. 创建批次日期 - 通过将“订单创建日期”值舍入到下一个发货日期(月份的第1个月或第15个月)来填充BATCH DATE列

  2. 创建最后的装运 - 使用SUBSCRIPTION LENGTH和BATCH DATE的总和填充LAST SHIPMENT列

  3. DELETE EXPIRED ORDERS - 删除LAST SHIPMENT< NOW

  4. 对我来说这似乎是合乎逻辑的,并且在某些网站上探讨这一切似乎都可能在Excel中,我似乎无法获得第一部分(在下一个月或第15个月的四舍五入)工作,这真的是整个事情的基石!

    非常感谢任何见解!

1 个答案:

答案 0 :(得分:0)

你的问题涉及几个方面,但你说你的主要问题是制定整个过程日期的事情,所以一旦你理解了日期位,我就不会解决很简单的问题。

下面演示了根据订单或任何日期计算出货日期的方法。

这是一个简单的条件检查列表,根据需要添加到日期,月份或年份。如果当天是第1天或第15天,您的待遇并非完全不明确,但以下假设在1日或15日预订的订单可在同一天完成。

您应该能够调整方法来处理您的其他请求r.e.最终发货日期。

Function GetShippingDate(orderDate As Date) As Date

    Dim mYear As Integer, mMonth As Integer, mDay As Integer

    mYear = Year(orderDate)
    mMonth = Month(orderDate)
    mDay = Day(orderDate)

    If mDay > 1 And mDay < 15 Then
        mDay = 15
    ElseIf mDay > 15 Then
        mDay = 1
        mMonth = mMonth + 1
    End If
    If mMonth > 12 Then
        mMonth = mMonth - 12
        mYear = mYear + 1
    End If

    GetShippingDate = DateSerial(mYear, mMonth, mDay)

End Function