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

时间:2012-06-27 14:05:59

标签: 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

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

LR = Range("NAME" & Rows.Count).End(xlUp).Row

1 个答案:

答案 0 :(得分:5)

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

LR = Range("NAME" & Rows.Count).End(xlUp).Row

还有,

Len(Range("NAME" & i).Value) 

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

Range(Name81).Value '81 is a random number

除非你的工作簿中有一个名为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