2016-05-06 4 views
0

Ich versuche einen Bereich in Spalte A zu durchlaufen und lösche jede Zeile, in der der Wert in Zelle A mit einem Buchstaben beginnt (z. B. C159 löschen, aber nicht 8T9G3). Ich denke, dass der Code richtig funktioniert, wenn ich das Zwischenstück gerade bekomme. Irgendwelche Vorschläge, wie ich den Code zum Funktionieren bringen kann?Zeile löschen, wenn der erste Buchstabe der Zelle ein Buchstabe ist

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 

Vielen Dank!

Antwort

1

einige Probleme bekommen:

  • Wenn Sie eine Zeile löschen und k zunimmt, überspringen Sie tatsächlich eine Zeile, die Sie nicht überprüfen. Also gehen Sie besser mit k nach unten, um dieses Problem zu vermeiden.

  • Die Art und Weise gegen ASCII-Werte zu vergleichen, hat falsche Syntax, wie Sie explizit einen Wert nach und unmittelbar vor jedem >= und <= Operator angeben. Aber statt eine Korrektur (die lang wäre), würde ich eine kürzere Syntax vorschlagen:

  • Überprüfung auf einen Buchstaben kann in einer lesbareren Weise erfolgen, die nicht die Kenntnis von ASCII-Codes erfordert. Überprüfen Sie einfach, ob das erste Zeichen in Großbuchstaben anders ist als in Kleinbuchstaben. Wenn ja, ist es ein Brief.

  • Das Schlüsselwort Then fehlt am Ende der Zeile If;

Code:

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

Arbeiten wie ein Zauber, danke! –

+0

Beachten Sie, dass die schließende Klammer nach .value nicht da sein sollte, aber ich weiß nicht, wie Sie es bearbeiten. –

+0

Ah, ja, ich habe gerade diese schlechte Klammer entfernt. Danke, dass du es erwähnt hast. – trincot

1

Um das erste Zeichen Ihres Strings zu prüfen, verwenden Sie die Funktion Left(). Der einfachste Weg herauszufinden, ob es sich nicht um eine Zahl handelt, ist die Funktion isNumeric(). Zusammengestellt werden Sie

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

aber '' oder '-' sind weder Buchstaben noch numerisch so sollten sie nicht gelöscht werden, aber Ihr Code tun würde ... (aber das in Ordnung sein kann? das OP) –

+0

Danke funktioniert perfekt für meinen Zweck. –

+0

@DirkReichel Ich hatte anfangs die gleiche Sorge, deshalb habe ich versucht, den ASC-Code zu machen, aber nach Datensatz haben keine Sonderzeichen, damit es für mich funktioniert. –

Verwandte Themen