用于从少于4个字符的列中删除行的宏

Jon*_*nny 0 excel vba excel-vba

我正在使用以下代码尝试删除整个行,当它在特定的"NAME"列中少于4个字符时.(即第1行中标题为NAME的列)数据库当前有大约10,000行.我知道现在的代码很接近,但是在尝试运行时我遇到了VB错误.我想我可能会错误地搜索特定列.

Sub Macro2()

' Macro to delete rows if there are less than 4 in the NAME column

    Dim LR As Long, i As Long
    Application.ScreenUpdating = False
    LR = Range("NAME" & Rows.Count).End(xlUp).Row
    For i = LR To 1 Step -1
        If Len(Range("NAME" & i).Value) < 4 Then Rows(i).Delete
    Next i
    Application.ScreenUpdating = True

End Sub
Run Code Online (Sandbox Code Playgroud)

编辑:我在以下行中收到VBA错误:

LR = Range("NAME" & Rows.Count).End(xlUp).Row
Run Code Online (Sandbox Code Playgroud)

Sco*_*man 5

正如其他人在上述评论中提到的那样,你的陈述

LR = Range("NAME" & Rows.Count).End(xlUp).Row
Run Code Online (Sandbox Code Playgroud)

并且,

Len(Range("NAME" & i).Value) 
Run Code Online (Sandbox Code Playgroud)

在给定的程序中对VBA没有任何意义,因为它们等同于说.

Range(Name81).Value '81 is a random number
Run Code Online (Sandbox Code Playgroud)

除非您的工作簿中有一个名为Name81(或任何其他数字)的定义名称,否则该代码将产生运行时错误.

我认为这会让你想要你想要:

Sub Macro2()

' Macro to delete rows if there are less than 4 in the NAME column

    Dim LR As Long, i As Long, lngCol as Long

    lngCol = Rows(1).Find("NAME",lookat:=xlWhole).Column 'assumes there will always be a column with "NAME" in row 1

    Application.ScreenUpdating = False


    LR = Cells(Rows.Count, lngCol).End(xlUp).Row

    For i = LR To 1 Step -1

        If Len(Cells(i, lngCol).Value) < 4 Then Rows(i).Delete

    Next i

    Application.ScreenUpdating = True

End Sub
Run Code Online (Sandbox Code Playgroud)