VBA - 删除不在给定日期范围内的数据

Posted

技术标签:

【中文标题】VBA - 删除不在给定日期范围内的数据【英文标题】:VBA -Delete data not in a given date range 【发布时间】:2013-10-07 17:23:56 【问题描述】:

我正在尝试根据给定的日期范围从工作表中删除数据。在“Grower Reporting”表上,我有一个小数据集,L 列中有日期。其余数据在 N、M 和 O 列中。在同一个工作表中,我有两个定义日期范围的单元格,单元格“A2” =开始日期和单元格“B2”=结束日期。我正在尝试从我的数据集中删除任何不属于给定日期范围的日期和相邻数据。

感谢 ARich 和 varocarbas 帮助我走到这一步!

这是我所做的(请耐心等待,我对编码的掌握很薄弱):

Sub delete_data()

Dim startDate As Date
Dim endDate As Date
Dim r_date As Date


startDate = Sheets("Grower Reporting").Range("a2").Value
endDate = Sheets("Grower Reporting").Range("b2").Value

Set r = Sheets("Grower Reporting").Range("L:L").Find(r_date, Range("L2"), _
LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlNext)

If (r_date >= startDate And r_date <= endDate) Then

  r.Offset(0, -1).Value = " "

     End If

End Sub

上面的代码似乎没有做任何事情。我认为我走在正确的轨道上,但急需一些指导。

【问题讨论】:

有办法吗?当然。但是你试过什么?我查看了您之前的问题,此代码与那里的标记答案相同。你知道……你应该自己做一些事情。您尝试解决什么问题(获取日期、比较日期等)以及为什么无法解决?此外,就您的代码不返回任何内容而言,“返回”是什么意思也不清楚,只需修改一些单元格即可。 我尝试将两个日期定义为变量,但无法弄清楚代码将日期范围与“I”列中的日期进行比较。 您发布的代码与此问题无关(并且是其他人编写的);将其作为支持很好,但它并不能证明您的最低理解、尝试的解决方案等。写下处理日期的部分,并澄清您对要返回的数据的含义。 另外,对于不清楚的术语,我们深表歉意。在编程方面我有点新手。 只要清楚,我对术语没有任何问题。 “返回”意味着执行某些分析并将某些值(变量)发送回调用者的函数。如果您不是那个意思,只需澄清您想要的内容:“像在我的原始代码中为满足日期条件的行向单元格添加值”? -> 不确定。你的解释越详细越好。请在前面写下您尝试过的日期,并确认您想要做什么。 【参考方案1】:

您必须在循环内执行检查(对于每一行)。日期接受与数字相同的运算符。示例代码:

If Not r Is Nothing Then
    Dim curDate As Date
    firstAddress = r.Address
    Do
        curDate = Sheets("Grower Reporting").Cells(i, 9).Value 'Column I
        If (curDate >= d1 And curDate <= d2) Then
           Sheets("Grower Reporting").Cells(i, 13).Value = r.Value
           Sheets("Grower Reporting").Cells(i, 14).Value = r.Offset(0, -3).Value
           Sheets("Grower Reporting").Cells(i, 15).Value = r.Offset(0, 6).Value
           i = i + 1
           Set r = Sheets("Grower Rejection Data").Range("E:E").FindNext(r)
        End If
    Loop While Not r Is Nothing And r.Address <> firstAddress
End If

注意:此代码假定所有输入都具有相同的(日期)格式。如果不是这种情况,您可能不得不依赖Format 函数或影响Cell 属性。如果处理不同的“区域设置”(例如,英国的英语计算机和美国的数据;日期格式不同),您可能会遇到一些问题。

【讨论】:

这看起来和我要找的完全一样!感谢您的所有帮助! @user1437463 没问题。我希望这能帮助你继续学习 VBA 并知道如何面对问题。 我收到一个错误“运行时错误 91 对象变量或未设置块变量”。错误发生在上述代码的第 13 行。我应该粘贴原始问题中的内容吗? @user1437463 最好告诉我确切的行。如果您之前的代码可以正常工作,那么这个版本也可以正常工作。 @user1437463 你错过了条件。但它是一样的......我介绍的位不会通过假设正确的输入而引起任何错误。此代码假定“I”列包含日期。无论如何,您报告的错误没有任何意义......看,让我们加快这个过程。您介意上传整个电子表格,以便我查看并告诉您有什么问题吗?

以上是关于VBA - 删除不在给定日期范围内的数据的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA删除范围内的空白行

SQL - 显示给定范围内的所有日期,并使用数据库中的时间戳计算该日期有多少帖子

SQL 如何查询日期在一定范围内的数据

Excel VBA 在给定范围的情况下使用表格内的单元格

在熊猫中生成给定范围内的随机日期

当表中有指定范围内的数据时返回布尔值