Excel VBA中搜索日期范围,并删除旧的条目

Excel VBA中搜索日期范围,并删除旧的条目

问题描述:

我需要一个宏,将搜索完成日期的整列和删除数据的其相应的行如果的90天自完成日期过去了。这是我到目前为止。Excel VBA中搜索日期范围,并删除旧的条目

Dim RowDate 
Dim CurrentDate 
Dim Interval 
Dim CurrentAddress 
Dim ValueCellRange As Range 
Dim ValueCell As Range 

'Interval set to an appropriate number of days 
Interval = 90 
CurrentDate = Now() 

'Identify starting row for sweep 
Set ValueCellRange = Range("G2:G100") 

'Set loop to execute until empty cell is reached 

For Each ValueCell In ValueCellRange 
    If CurrentDate - ValueCell.Value >= Interval Then 
     ValueCell.EntireRow.ClearContents 
    End If 
Next ValueCell 

'Clear variable value for next initialization 
Set ValueCell = Nothing 
+0

有什么问题,这个循环?它是否按预期工作? BTW改变与的currentdate =日期 – sktneer

+0

此代码工作完全正常行的currentdate = NOW()。你甚至都不需要现在()改为日期,因为它只会改变的currentdate和单元格值之间的差异的十进制值。 – Masoud

+0

你好,对不起,我提交了这份没有澄清。当G2:G100范围内存在空白单元格时,该宏无法正常工作。我需要补充的是忽略了这些细胞(不删除该行数据),只是移动到旁边的单元格内容评估,以我的观点一个规定。有谁会知道实现这个最简单/最好的方法吗?先谢谢你。 – Scope1414

如果你只是想跳过空白另一个if语句添加在循环

编辑通过增加工作表

Dim ws as Worksheet 
For Each ws in Worksheets 
    Set ValueCellRange = ws.Range("G2:G100") 
    For Each ValueCell In ValueCellRange 
     If ValueCell.Value <> "" Then 
      If CurrentDate - ValueCell.Value >= Interval Then 
       ValueCell.EntireRow.ClearContents 
      End If 
     End If 
    Next ValueCell 
Next ws 
+0

这太棒了!谢谢。但是,如果我可以补充,我还有一个规定。我的工作簿中还有两个工作表。它们完全相似,需要在其上运行这个宏。一般来说,这个宏需要在所有三张纸上运行(范围将是相同的)。最简单的方法是什么?创建范围对象会起作用吗?我如何将范围对象与For语句一起运行? – Scope1414

+0

@ Scope1414我编辑了原文来做到这一点。您需要说的是“For Each ws In Worksheets ...”,它应该循环遍历工作簿中的所有工作表。 – BerticusMaximus

+0

annnnd我还有一两件事。比方说,一行内容被清除,之前居住在其他行的中间(其中自完成日期起还没有90天),我将如何移动下面的所有数据以关闭已删除的剩余空白行? – Scope1414