2016-05-06 3 views
0

Я пытаюсь выполнить цикл в столбце A и удалить каждую строку, где значение в ячейке A начинается с буквы (например, удалить C159, но не 8T9G3). Я думаю, что код может работать правильно, если я получу между кусочками прямо. Любые предложения, как я могу заставить код работать?Удалить строку, если первая буква в ячейке - это буква

Sub DeleteLetterRows() 

Dim k as integer 

For k = 2 To 100 
    If Asc(ActiveSheet.Range("A" & k).value) >=65 and <=90 or >=97 and <=122 
     Rows(k).EntireRow.Delete 
    Else 
    End If 
Next k 

End Sub 

Спасибо!

ответ

1

Некоторых вопросы:

  • При удалении строки, и к увеличивается, вы на самом деле пропустить строку, которую вы не проверяете. Итак, лучше пойди вниз с k, чтобы избежать этой проблемы.

  • , как вы сравните со значениями ASCII имеет неправильный синтаксис, как вам нужно явно указать значение после и непосредственно перед каждым оператором >= и <=. Но вместо того, чтобы давать исправление (которое было бы длинным), я предлагаю более короткий синтаксис:

  • Проверка на письмо может быть выполнена более читаемым способом, что не требует знания кодов ASCII. Просто проверьте, отличается ли первый символ, если положить его в верхнем регистре, чем при установке в нижнем регистре. Если это так, это письмо.

  • Вам не хватает ключевое слово Then в конце строки If;

Код:

Sub DeleteLetterRows()  
    Dim k as integer 
    Dim l as String  
    For k = 100 To 2 Step -1 
     l = Left(ActiveSheet.Range("A" & k).value, 1) 
     If UCase(l) <> LCase(l) Then 
      Rows(k).EntireRow.Delete 
     End If 
    Next k  
End Sub 
+0

Работайте как шарм, спасибо! –

+0

Обратите внимание, что закрывающая скобка после .value не должна быть там, но я не знаю, как ее редактировать. –

+0

А, да, сейчас я просто удалил эту плохую скобку. Спасибо, что упомянул об этом. – trincot

1

Для проверки первого символа вашей строки вы используете функцию Left(). Самый простой способ узнать, является ли не числом, является функция isNumeric(). Соединенные вы получите

Sub DeleteLetterRows() 

    Dim k as integer 
    Dim test As String 

    For k = 2 To 100 
    test = Left(ActiveSheet.Range("A" & k).value,1) 
    If isNumeric(test) = False then 
     Rows(k).EntireRow.Delete 
    Else 
    End If 
    Next k 

End Sub 
+0

но '' или '-' не являются ни буквы, ни числовая, поэтому они не должны быть удалены, но ваш код будет делать ... (но это может быть хорошо для? OP) –

+0

Спасибо, отлично работает для моей цели. –

+0

@DirkReichel У меня изначально была такая же проблема, поэтому я попытался сделать это ASC-код, но в наборе данных нет специальных символов, поэтому он будет работать для меня. –

Смежные вопросы