VBA在具有持续时间的单元格中分隔日期范围

时间:2014-11-24 11:09:01

标签: excel excel-vba vba

来自 This post的SørenHoltenHansen的代码实际上是我答案的一部分,但并非完整。
我需要将日期及其各自的持续时间分开。

例子:
开始日期结束日期持续时间
3月11日 - 11月5日 - 11月5日

我需要它看起来像这样:
3月11日1日 4月11日1日 5月1日0.5日

我需要在最后一天显示半天。我不知道如何分裂。 感谢此论坛提供的帮助。这真的会拯救我的生命!

我的代码:
    ActiveCell.FormulaR1C1 = _     “= IF(AND(RC [-4] = R [-1] C [-4],RC [-4] = R [1] C [-4])中,R [-1] C [-2] -R [-1] C,IF(R [-1] C [-2] = R [-1] C,R [-1] C [-2],R [-1] C [-2]) )”     范围( “E21”)。选择

谢谢你,
马文。

1 个答案:

答案 0 :(得分:0)

以下代码可能有助于解决您的问题。

'Function print_date
' 1st argument: date of period begin
' 2nd argument: date of period end
' 3rd argument: duration in days
'
' CAUTION: This code does not check consistency between dates and duration.
'    If you set duration 1.5 between Nov-3 to Nov-5, this code raise no error
'    and you may see duration -0.5 on Nov-5.
Function print_date(beginDay, endDay, duration) As Integer
  Dim aDay As Date
  Dim row As Integer

  row = 1
  For aDay = beginDay To endDay
   Cells(row, 1) = aDay 'set date on first column
    If duration > 1# Then
      Cells(row, 2) = 1 'set 1 on second column because more one day left.
    Else 'Duration is less than one day
      Cells(row, 2) = duration
    End If
    duration = duration - 1#
    row = row + 1
  Next aDay

End Function

' Test routine I checked operation of print_date.
Sub test_print_date()
 Dim a As Long

 a = print_date(DateValue("2014/11/03"), DateValue("2014/11/05"), 2.5)


End Sub

运行' test_print_date()'时,您可能会在单元格A1:B3上看到输出。的代码。