【问题标题】:Deleting rows dated older than 3 days old删除日期早于 3 天的行
【发布时间】:2015-01-09 02:41:27
【问题描述】:

我对此很陌生,所以如果可以的话,请帮助我或给我一些提示。基本上,我有一列 (N),其中包含单元格中的日期和注释行。比如"12/20 Notes:-Left start site", "09/23 Notes:- Needs more information"....

正如您所见,所有这些单元格显然都以日期开头,但其中包含注释,这使得它变得困难。基本上,我正在尝试编写一些 VBA 代码,允许我删除距当前日期超过 3 天的行。

【问题讨论】:

  • 你能改变你的工作表设计,让日期单独在一个单元格中吗?
  • 您是否已经有一些需要帮助的代码?现在这似乎是一个代码编写请求。
  • 根据 Chris 和 Matt,如果您可以将日期分隔到自己的单元格中,这是一个简单的练习。此外,您需要尝试一下并发布您的代码。
  • 那么,您想删除所有行,其中 N 列中的单元格以 dat IN mm/dd FORMAT 开头的所有行,指的是早于 3 天的日期,对吧?
  • 是的,Dirk 这就是我想要做的,但日期是文本格式,这让我很失望

标签: vba date excel


【解决方案1】:
Sub test()

Dim rgNote As Range, clNote As Range
Dim noteDate As Variant, splitDate As Variant, splitNote As Variant
Dim expiredData

' 决定直到票据被认为过期

expiredData = DateSerial(Year(Now), Month(Now), Day(Now)) - 3

' 找到要检查的单元格

Set rgNote = Intersect(Range("N:N"), Range("N:N").Parent.UsedRange)
If Not rgNote Is Nothing Then
    For Each clNote In rgNote.Cells

' 确认这确实是一张便条。这实际上取决于电子表格的结构

        splitNote = Split(clNote.Formula)
        If UBound(splitNote) > LBound(splitNote) Then
            splitDate = Split(splitNote(LBound(splitNote)), "/")
            If UBound(splitDate) = LBound(splitDate) + 1 Then

' 提取日期,在这种情况下,我们期望它们为 mm/dd 格式并假设它们都是最近的过去

                noteDate = DateSerial(Year(Now), splitDate(LBound(splitDate)), splitDate(LBound(splitDate) + 1))
                If noteDate > Date Then
                    noteDate = DateSerial(Year(noteDate) - 1, Month(noteDate), Day(noteDate))
                End If

'如果过期,则删除该行

                If noteDate <= expiredData Then
                    clNote.EntireRow.Delete
                End If
            End If
        End If
    Next clNote
End If

End Sub

【讨论】:

  • 首先非常感谢 Dirk。但是当我尝试应用它时,它给了我一个超出范围的错误,并且这一行被突出显示,“If UCase(splitNote(LBound(splitNote) + 1)) = "NOTE:" Then"
  • 首先非常感谢 Dirk。但是当我尝试应用它时,它给了我一个错误,上面写着“下标超出范围”并且这一行被突出显示,“如果 UCase(splitNote(LBound(splitNote) + 1)) = “NOTE:”Then”跨度>
  • 再试一次,James:添加了“If UBound(splitNote) > LBound(splitNote) Then”
  • 德克,我之前忘了提。并非所有笔记都以“注意:-”开头。此外,有些日期旁边有注释,有些则没有。但不管它们都是文本格式,并且日期后面有一个空格。所以在你的代码中,我应该用空格替换 "Note:" 吗?提前致谢
  • Dirk,它给了我一个错误,“应用程序定义或对象定义的错误”,运行时错误“1004”。并且这一行突出显示“splitNote = Split(clNote.Formula)”
猜你喜欢
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 2016-03-12
相关资源
最近更新 更多