Excel 如何根据用户指定的日期筛选和删除数据行?

Excel 如何根据用户指定的日期筛选和删除数据行?,excel,vba,Excel,Vba,我有数据要根据开始日期和结束日期进行过滤 开始日期和结束日期在“主发布者内容”中有各自的列 开始日期在列G中,结束日期在列H中 我正在尝试根据“输入信息”选项卡上用户指定的日期范围筛选和删除数据行,用户指定的开始日期在单元格C2中,用户指定的结束日期在单元格E2中 例如,如果单元格C2为2019年4月1日且单元格E2为2019年4月30日我希望删除不在这些日期之间的数据行 这段代码只处理结束日期。报告说没有发现细胞 Public Sub DeleteRowsWithAutofilterDates

我有数据要根据开始日期和结束日期进行过滤

开始日期和结束日期在“主发布者内容”中有各自的列 开始日期在列
G
中,结束日期在列
H

我正在尝试根据“输入信息”选项卡上用户指定的日期范围筛选和删除数据行,用户指定的开始日期在单元格
C2
中,用户指定的结束日期在单元格
E2

例如,如果单元格
C2
2019年4月1日
且单元格
E2
2019年4月30日
我希望删除不在这些日期之间的数据行

这段代码只处理结束日期。报告说没有发现细胞

Public Sub DeleteRowsWithAutofilterDates()

    Dim wksData As Worksheet
    Dim lngLastRow As Long
    Dim rngData As Range
    Dim StartDate As Range
    Dim EndDate As Range

    'Set references up-front
    Set wksData = ThisWorkbook.Worksheets("Master Publisher Content")
    Set StartDate = ThisWorkbook.Worksheets("Enter Info").Range("C2")
    Set EndDate = ThisWorkbook.Worksheets("Enter Info").Range("E2")

    'Identify the last row and use that info to set up the Range
    With wksData
        lngLastRow = .Range("G" & .Rows.Count).End(xlUp).Row
        Set rngData = .Range("G2:G" & lngLastRow)
    End With

    '------------------------------------------------------------
    Application.DisplayAlerts = False
    With rngData
        'Apply the Autofilter method to the first column of
        .AutoFilter Field:=1, Criteria1:="<=EndDate"

        'Delete the visible rows while keeping the header
        .Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Rows.Delete
    End With

    '----------------------------------------------------------------

    Application.DisplayAlerts = True

    'Turn off the AutoFilter
    With wksData
        .AutoFilterMode = False
        If .FilterMode = True Then
            .ShowAllData
        End If
    End With

    'Let the user know the rows have been removed
    MsgBox "Damn son! Rows removed."

End Sub
公共子删除行自动筛选日期()
将wksData设置为工作表
暗淡的玻璃和长的一样
暗rngData As范围
暗起始日期作为范围
Dim EndDate As范围
“在前面设置引用
设置wksData=ThisWorkbook.Worksheets(“主发布者内容”)
Set StartDate=此工作簿。工作表(“输入信息”)。范围(“C2”)
Set EndDate=此工作簿。工作表(“输入信息”)。范围(“E2”)
'识别最后一行并使用该信息设置范围
与wksData
lngLastRow=.Range(“G”和.Rows.Count).End(xlUp).Row
设置rngData=.Range(“G2:G”和lngLastRow)
以
'------------------------------------------------------------
Application.DisplayAlerts=False
与恩格达塔
'将自动筛选方法应用于

.AutoFilter字段:=1,准则1:=“您正在查找与开始日期和结束日期相关的单元格值,而不是范围本身。将
Dim StartDate作为范围
Dim EndDate作为范围
,并将它们设置为
Dim StartDate作为日期
Dim EndDate作为日期

更改后
设置开始日期=此工作簿。工作表(“输入信息”)。范围(“C2”)
to
StartDate=此工作簿。工作表(“输入信息”)。单元格(2,“C”)。值
Set EndDate=thiswook.Worksheets(“输入信息”).Range(“E2”)
EndDate=thiswook.Worksheets(“输入信息”).cells(2,“E”).value

这将获得单元格的值,而不是其范围

lngLastRow=.Range(“G”和.Rows.Count).End(xlUp)。行
应为
lngLastRow=.Cells(.Rows.Count,“G”).End(xlUp)。行

我不确定您将经历多少行,但如果有很多行,实际上删除可能会非常慢,因此这将清除该行,然后进行排序

    Dim wksData As Worksheet
    Dim lngLastRow As Long
    Dim LastCol As Integer
    Dim StartDate As Date
    Dim EndDate As Date

    Dim tDate As Date
    Dim iter As Long

    Set wksData = ThisWorkbook.Worksheets("Master Publisher Content")

    StartDate = ThisWorkbook.Worksheets("Enter Info").Cells(2, "C").value
    EndDate = ThisWorkbook.Worksheets("Enter Info").Cells(2, "E").value

    With wksData
        lngLastRow = .Cells(.Rows.Count, "G").End(xlUp).row

        For iter = 2 To lngLastRow
            if .Cells(iter, "G").value = "" or isnull(.Cells(iter, "G").value) then
                .Rows(iter) = ""
            else
                tDate = .Cells(iter, "G").value

                If tDate < StartDate Or tDate > EndDate Then
                    .Rows(iter) = ""
                End If
            end if
        Next
        LastCol = .Cells.Find(What:="*", after:=ActiveSheet.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
        .Range(Cells(1, 1), Cells(lngLastRow, LastCol)).Sort key1:=.Columns(1), Order1:=xlAscending, Header:=xlYes
    End With
Dim wksData作为工作表
暗淡的玻璃和长的一样
将LastCol设置为整数
Dim StartDate作为日期
Dim EndDate作为日期
Dim tDate作为日期
暗淡的iter
设置wksData=ThisWorkbook.Worksheets(“主发布者内容”)
StartDate=此工作簿。工作表(“输入信息”)。单元格(2,“C”)。值
EndDate=此工作簿。工作表(“输入信息”)。单元格(2,“E”)。值
与wksData
lngLastRow=.Cells(.Rows.Count,“G”).End(xlUp).row
对于iter=2至lngLastRow
如果.Cells(iter,“G”).value=”“或isnull(.Cells(iter,“G”).value),则
.Rows(国际热核实验堆)=“
其他的
tDate=.Cells(iter,“G”).值
如果tDate<开始日期或tDate>结束日期,则
.Rows(国际热核实验堆)=“
如果结束
如果结束
下一个
LastCol=.Cells.Find(What:=“*”,after:=ActiveSheet.Cells(1,1),LookIn:=xlFormulas,LookAt:=_
xlPart,SearchOrder:=xlByColumns,SearchDirection:=xlPrevious,MatchCase:=False)。Column
.Range(单元格(1,1),单元格(lngLastRow,LastCol))。排序键1:=.Columns(1),顺序1:=xl升序,标题:=xlYes
以

非常感谢您的时间,我非常感谢!我似乎从下面的代码行中得到了一个“类型不匹配错误”:tDate=.Cells(iter,“G”)。value可能是这样的,日期是格式化的吗?到目前为止,我已经尝试了DD/MM/YYYY和MM/DD/yyyyy来处理“G”列中的所有单元格“是否有日期值?空单元格或未格式化为日期的字符串将引发错误。实际日期格式应该无关紧要,您可以执行MM/DD/YYYY、DD-MM-YY等操作。这些操作应该没有问题。G列中的某些单元格为空,我想删除单元格为空的行。G列和H列中的所有单元格的格式均为MM/DD/YYYY,但显示为“Month Day,Year”@Alex刚刚编辑了一个空格检查,这将停止错误。