【问题标题】:Count the number of time that we increase a given Date range计算我们增加给定日期范围的次数
【发布时间】:2019-12-21 23:25:48
【问题描述】:

我想计算在给定间隔(例如 6 个月)时(给定日期范围)我移动日期(向前)的次数。


示例:

范围:

开始日期:2019/08/05

结束日期:2020/08/05

间隔: 6 个月

  • 第一次:2019/08/05 + 6 个月 = 2020/02/05
  • 第二次:2020/02/05 + 6 个月 = 2020/08/05

对于这种情况,输出 = 2


我想在特定的单元格中打印我想要的输出。

我想使用以下语法构建一个 VBA:

DateAdd(间隔、数字、日期)

Private Sub CommandButton1_Click()
    Dim FirstDate As Date    ' Declare variables.
    Dim IntervalType As Integer
    Dim Number As Integer
    Dim EndDate As Date
    Dim TempDate As Date

    Dim i As Integer

    IntervalType = "m" ' "m" specifies MONTHS as interval.

    FirstDate = Cells(1, 1).Value
    EndDate = Cells(1, 2).Value
    Number = Cells(1, 3).Value  ' "Number" For the syntax DateAdd.

    i = 1
    Do Until TempDate = EndDate
        TempDate= DateAdd(IntervalType, Number, FirstDate)
        i = i + 1
    Loop
    Range("D1").Value = i
End Sub

但是我收到了这个错误:

【问题讨论】:

  • 你在哪一行得到错误?
  • 你好@rohrl77 在第 13 行对吗?

标签: excel vba loops excel-formula


【解决方案1】:

您遇到的错误是因为您尝试将 String 分配给 Integer 数据类型。将IntervalType 更改为字符串。

Sub DateTest()
    Dim FirstDate As Date    ' Declare variables.
    Dim IntervalType As String
    Dim Number As Integer
    Dim EndDate As Date
    Dim TempDate As Date
    Dim i As Integer

    IntervalType = "m" ' "m" specifies MONTHS as interval.
    FirstDate = Cells(1, 1).Value
    EndDate = Cells(1, 2).Value
    Number = Cells(1, 3).Value  ' "Number" For the syntax DateAdd.

    ' If number is not greater than zero an infinite loop will happen.
    If Number <= 0 Then
        MsgBox "Number needs to be greater than 0", vbCritical
        Exit Sub
    End If

    i = 1
    Do Until TempDate = EndDate
       If i <= 1 Then
           TempDate = DateAdd(IntervalType, Number, FirstDate)
       Else
           TempDate = DateAdd(IntervalType, Number, TempDate)
        End If
        i = i + 1
        Debug.Print i
    Loop
    Range("D1").Value = i - 1
End Sub

此外,您正在运行一个无限循环,其中 TempDate 总是从 FirstDate 变量循环。

另外,如果您的Number 小于或等于零,那么您将获得一个无限循环。

另外,Else 消除了溢出错误。没有它,TempDate 将在每次循环后重置。

【讨论】:

  • 嗨,迈尔斯,谢谢。现在看起来更好了,INow 如果我选择例如 25-Jul-19 作为开始日期 End Date 25-Jul-20(频率 6M) 结束日期它工作正常,但如果我更改结束日期,假设 25-Jul- 21 我得到一个错误:“溢出”它没有说太多,可能是什么原因造成的?再次感谢
  • Lorenzo,我更新了代码,现在应该可以正常运行了。
  • 嗨 Miles,很抱歉回复晚了。也感谢您的宝贵时间。
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 2021-05-01
  • 2020-11-09
相关资源
最近更新 更多