Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA宏,用于在特定列“U”上过滤,如果列U有数据或日期,则会删除整行_Excel_Vba - Fatal编程技术网

Excel VBA宏,用于在特定列“U”上过滤,如果列U有数据或日期,则会删除整行

Excel VBA宏,用于在特定列“U”上过滤,如果列U有数据或日期,则会删除整行,excel,vba,Excel,Vba,我不熟悉VBA,宏。我希望宏在U列上进行过滤,最好是使用列名称Vesser Deceed from Port of Loading(船舶离开装货港),如果该列有日期或数据,则删除整个对应行。 我下面的代码不起作用。。。请帮助我在下面粘贴代码和excel屏幕以供参考 Private Sub CommandButton5_Click() ActiveWorkbook.Worksheets("POL").Range("U").NumberFormat = &q

我不熟悉VBA,宏。我希望宏在U列上进行过滤,最好是使用列名称Vesser Deceed from Port of Loading(船舶离开装货港),如果该列有日期或数据,则删除整个对应行。 我下面的代码不起作用。。。请帮助我在下面粘贴代码和excel屏幕以供参考

Private Sub CommandButton5_Click()

ActiveWorkbook.Worksheets("POL").Range("U").NumberFormat = "m/d/yyyy"
Rows(2).Select

Rows(1).AutoFilter
 
'Create a variable that = the last used row in column U
lr = Cells(Rows.Count, "U").End(xlUp).Row
 
'Create a looping variable # to go backwards from the last used Row# to 1
For i = lr To 1 Step -1
    If Cells(i, "U").Value < #1/3/2009# Or Cells(i, "U").Value > #2/3/2010# Then
        Rows(i).EntireRow.Delete shift:=xlUp
    End If
Next i

End Sub

例如,如果从装货港出发的U列船舶有数据或日期,则也删除所有相应的行。离开装货港的船只最好不要列号,因为列号可能会有所不同。。。请帮助

我写了一个宏,它将删除U列或第21列中任何非空的内容,包括名为POL的工作表中的整行内容

根据您的描述,我将执行以下操作:

Option Explicit

Dim wb As Workbook

Dim sRng As Range
Dim fRng As Range

Dim cel As Range

Dim tRow As Long 
Dim fCol As Long


Sub foo()
    
    'setting wb as thisworkbook
    Set wb = ThisWorkbook
    
    'row 1 assigned into fRng(find range) object
    Set fRng = wb.Sheets("POL").Rows(1).Find(what:="Vessel Departed from Port of Loading", LookIn:=xlValues, lookat:=xlWhole)
    
    'gets fRng range object, and assigns its column property value into fCol variable
    fCol = fRng.Column
    

    'finding the last row for column 1, make sure you select a col that covers the whole data set, based on last row
    tRow = wb.Sheets("POL").Cells(Rows.Count, 1).End(xlUp).Row

    'assigning range based on col index based on str search(fCol) + total row count (tRow) in sRng range object
    With wb.Sheets("POL")
    
        Set sRng = .Range(.Cells(1, fCol), .Cells(tRow, fCol))
    
    End With
    
    'call sub deltR, the function does a filter based on range, string, and col number passed as argument.
    'passing arguments: range (sRng), delete anything not empty, on col#1 (sRng has only one range = columns("U:U" + tRow)
    Call deltR(sRng, "<>", 1)


End Sub





Private Sub deltR(ByRef sRng As Range, ByVal aStr As String, ByVal f As Integer)

    'this sub procedure looks for a string (aStr) passed in (sRng) range object range, based on col number (f)
    With sRng

        .AutoFilter field:=f, Criteria1:=aStr
        .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete

    End With

    wb.Sheets("POL").AutoFilterMode = False

    Set sRng = Nothing

End Sub
只需运行子过程foo即可运行脚本

我根据你上面写的代码给这张纸命名为POL。我不知道你的工作簿是如何组织的。所以我根据你的解释做了一个猜测

尝试一下,然后在评论中回复我,以解决可能出现的问题

更新:请再次检查,我创建了一个额外的范围对象,用于搜索第1行中离开装货港字符串的船舶,并返回col索引 此外,我还删除了最后的设置wb=nothing。我想这可能是我在评论中读到的错误的原因

再试一次,如果有问题请告诉我


谢谢

Perfect@Victor Song这首歌很管用!但是,它在wb.SheetsPOL.AutoFilterMode=False处停止了循环,在该循环正常运行后,我将/更改了代码给了ActiveWorkbook.WorksheetsPOL.AutoFilterMode=False。。。但是,我没有给出列号U1:U,而是想提及列名,即离开装货港的船舶,因为列号U1:U的变化可能会更好地给出一个列名,在此基础上进一步删除数据。。。。如果你能帮我做这件事,我将不胜感激。再次感谢。我看到了你的描述,看到了你的评论。有一种基于字符串查找列位置的方法。如果您正在查找名为Vessel Deceed from Port Loading的列,则可以实现该脚本。我将更新脚本并将其发送给您请参阅更新,我创建了一个额外的范围对象,用于搜索第1行中离开装货港字符串的船舶,并返回col索引。现在脚本将找到包含容器的列。。。加载和搜索非空白项并删除entirerow。你好@Victor Song我今天又发布了一条查询,我对此感到很挣扎。。。如果你能检查并帮助我,我会很高兴。。。查询标题在特定列上进行筛选,并删除所有具有未来日期的数据。谢谢