根据选择过滤和删除数据

时间:2016-02-22 13:44:04

标签: vba excel-vba excel

目标:应用过滤器>选择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月,并且不会删除任何内容。我在这里做错了什么?我已经使用了几种排列和组合,但这似乎无法直接。

enter image description here

2 个答案:

答案 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日)之前隐藏所有数据,您将能够删除它们。