2012-06-27 2 views
0

Я использую следующий код, чтобы попытаться удалить целые строки, когда он содержит менее 4 символов в конкретном столбце «ИМЯ». (т. е. столбец с заголовком в строке 1, являющийся NAME). В настоящее время база данных содержит около 10 000 строк. Я знаю, что код сейчас близок, но при попытке запустить его я получаю ошибку VB. Я думаю, что я могу найти конкретный столбец по имени неправильно.Макрос для удаления строк из столбцов, которые имеют меньше 4 символов

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 

Edit: Я получаю сообщение об ошибке VBA в следующей строке:

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

Я не могу получить то, что это название вещь, потому что вы, вероятно, не будете так много именованного диапазона? Два варианта: ваш код неверен при проверке диапазона (лучше использовать '.Cells (i, j)' или вам лучше проверить, существует ли ваш именованный диапазон – JMax

+1

Является ли ячейка «NAME» в определенных столбцах? это всегда одно и то же? Я бы сразу ссылался на это значение, как описывает @JMax, с '.Cells (i, j)' или '.Range (" A "и Row)'. – Gaffi

+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 
+0

Я получаю ошибку времени выполнения '1004' 'Метод' Range 'объекта'_Global' не удался. Это происходит на этой строке: LR = ячейки (Rows.Count, Range (myRange) .Column) .End (xlUp) .Row' – Jonny

+0

У вас есть определенное имя как ** NAME ** на вашем листе/в ваша книга? Если нет, измените 'myRange =" NAME "' на любое 'myRange =" [WHATEVER NAME YOU NEEDED] ". Если вам нужен только конкретный столбец, вы можете просто использовать, например, 'myRange =" C1 "для столбца C, но если это так, вы хотите обратиться к определенным столбцам, я бы переписал код a бит по-разному. –

+0

Я хочу удалить строки с числом символов менее четырех, которые находятся только в столбце «NAME». (NAME - заголовок столбца) Это только один рабочий лист. Как мне переписать код при работе с этим конкретным столбцом? пс. спасибо за вашу помощь в последнее время. – Jonny