目标:应用过滤器>选择2016年1月的上个月数据,然后仅删除此数据。
非常重要 =宏必须自动选择上个月和当前日期,并仅删除这些数据。 6月的例子,宏应该能够过滤2016年1月至5月的所有数据,然后将其删除。
我不知道怎样才能得到这个,我尝试过DateSerial,但即使这样也不行。
重要信息:数据来自B-J栏,Header = B2-J2,日期:C2,日期格式为2016年1月。
到目前为止我所做的工作如下:
Sub Reporting()
Sheets("DATA_INPUT").Select
With ActiveSheet
.AutoFilterMode = False
.Range("B2").AutoFilter
.Range("B2").AutoFilter Field:=2, Criteria2:="1/1/2016"
End With
Dim myRow As Range
Dim ToDel As Range
Dim mainRange As Range
Set mainRange = ActiveSheet.Range("B2:J3")
For Each myRow In mainRange.Rows
If myRow.EntireRow.Hidden Then
If ToDel Is Nothing Then
Set ToDel = myRow
Else
Set ToDel = Union(ToDel, myRow)
End If
End If
Next
If Not ToDel Is Nothing Then
ToDel.Delete
End If
End Sub
运行上述代码后,将应用过滤器,但未选择任何内容,即2016年1月,并且不会删除任何内容。我在这里做错了什么?我已经使用了几种排列和组合,但这似乎无法直接。
答案 0 :(得分:0)
最后我明白了。我觉得坚持得到了回报。这是给我提供所需输出的代码:
Sheets("DATA_INPUT").Select
With ActiveSheet
.AutoFilterMode = False
.Range("B2:L2").AutoFilter
.Range("B2:L2").AutoFilter Field:=11, Criteria1:="2016"
End With
Sheets("DATA_INPUT").Range("B2").CurrentRegion.SpecialCells(xlCellTypeVisible).Areas(2).Columns(1).Cells(1, 1).Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select
Selection.EntireRow.Delete
End Sub
注意:我创建了两个额外的列,它们可以获得月(K2)和年(L2)。我根据年份(L2)过滤公式。感谢所有帮助过我的人。
答案 1 :(得分:-1)
可能是你的过滤器会像这样,
Dim Dt As Date
Dt = DateSerial(Year(Now), Month(Now), 1)
With ActiveSheet
.AutoFilterMode = False
.Range("B2").AutoFilter
.Range("B2").AutoFilter Field:=1, Criteria1:=">" & Dt
End With
上面的代码,将在本月(2016年2月1日)之前隐藏所有数据,您将能够删除它们。