excel 如果列中的时间>07:45,则删除表行

bq8i3lrv  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(146)

我是VBA的新手,已经得到了我需要的大部分工作,但我在这最后一部分卡住了。
工作表用于将数据粘贴到表中,然后根据粘贴的数据创建用于特定目的的表。
我需要编写一个宏来删除表中“时间”列中时间晚于07:45的行。
该表如下:
| 识别号|姓|初始化|位置|时间|事件|目的地|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 十二|姓名1|I1|位置1|18点整|Ev1|目的地1|
| 三十四|姓名2|I2|位置2|7点45分|第二版|目的地2|
| 五十六|姓名3|I3|位置3|十一点整|第三版|目的地3|
| 七十八|姓名4|I4|位置4|05时|第四版|目的地4|
This is a screenshot of the table currently
运行宏后,它应如下所示:
| 识别号|姓|初始化|位置|时间|事件|目的地|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 三十四|姓名2|I2|位置2|7点45分|第二版|目的地2|
| 七十八|姓名4|I4|位置4|05时|第四版|目的地4|
This is how the table should look after
我已经使用这段代码删除了另一个文件中的空表行,但我不确定如何修改它以实现此目的:

Dim EventsRng As Range
    On Error Resume Next
    Set EventsRng = Range("Events[[ID]]").SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
    If Not EventsRng Is Nothing Then
        EventsRng.Delete Shift:=xlUp
    End If

我也被建议这样做,但也没能适应工作:
x一个一个一个一个x一个一个二个x

z9smfwbn

z9smfwbn1#

如果不介意将结果复制到其他位置,可以使用简单的筛选器。
假设第一个表是名为EventsTable

Option Explicit

Sub DeleteTblRows()
    Dim Tbl As ListObject
    Dim idCol As Long
    Dim Dest As Range
    
Set Tbl = ThisWorkbook.Worksheets("Sheet1").ListObjects("Events")
idCol = Tbl.ListColumns("Time").Index

Tbl.AutoFilter.ShowAllData
Tbl.Range.AutoFilter Field:=idCol, Criteria1:="<=7:45", Operator:=xlAnd

Set Dest = ThisWorkbook.Worksheets("Sheet1").Cells(20, 1)
Dest.Resize(rowsize:=10000, columnsize:=Tbl.Range.Columns.Count).Clear

Tbl.Range.SpecialCells(xlCellTypeVisible).Copy Dest

Tbl.AutoFilter.ShowAllData
        
End Sub

相关问题