【问题标题】:Compare a Range Of Dates Against One Date - VBA将一系列日期与一个日期进行比较 - VBA
【发布时间】:2015-04-16 17:56:37
【问题描述】:

我不擅长 VBA,但有人要求我为我的公司创建一个工具,让用户可以放入日期信息列表;需要分析信息,并且所有记录的日期早于不同的静态日期(下面,它在单元格“O2”中。我至少能够删除一些记录,但它符合我需要的标准,我的记录没有被正确删除:

Sub RemoveDates()
Dim rng As Range
Dim rng2 As Range
On Error Resume Next
Set rng2 = Range("M3:M1002")
For Each rng In rng2
If CDate(rng) < CDate("O2") Then
rng.EntireRow.Delete
Else
End If
Next
End Sub

日期都将存储在 M3:M1002 范围内,尽管条目数是可变的,但它们总是小于 1000。我想删除包含小于固定日期的日期的行单元格“O2”。当我运行宏时,我删除了一些日期,但仍有一些日期早于“O2”中列出的日期

谢谢

【问题讨论】:

  • 是否跳过?你正在经历它,所以当你 entirerow.delete 说.. 第 12 行时,第 13 行达到第 12 行,循环进入第 13 行,跳过第 13 行的初始值
  • 我认为这就是正在发生的事情。正如我所说,我不精通 VBA,所以我不确定,我如何确保不会发生这种情况?

标签: vba date excel


【解决方案1】:

您必须向后运行循环或使用如下结构:

Sub RemoveDates()
    Dim rng As Range
    Dim rng2 As Range
    Dim KillRange As Range
    Dim stdDate As Date
    Set rng2 = Range("M3:M1002")
    Set KillRange = Nothing
    stdDate = CDate(Range("O2"))

    For Each rng In rng2
        If CDate(rng) < stdDate Then
            If KillRange Is Nothing Then
                Set KillRange = rng
            Else
                Set KillRange = Union(KillRange, rng)
            End If
        End If
    Next rng

    If Not KillRange Is Nothing Then
        KillRange.EntireRow.Delete
    End If
End Sub

【讨论】:

  • 您好,感谢您的回复!我已经复制并粘贴了这个来试试,If CDate(rng) &lt; stdDate Then 行有一个“类型不匹配”
  • 这意味着将单元格内容转换为日期时遇到问题.....单元格中到底有什么?
  • 我想我明白了,当它已经是一个日期时我不需要这个 CDate
猜你喜欢
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多