2016-04-13 18 views
0

Ich versuche, Dezimalwerte in Excel VBA zu vergleichen und Zeilen zu löschen, die den Kriterien entsprechen. Dies war mein ursprünglicher Code und übersprang viele Zeilen.Vergleichen von Dezimalwerten Excel VBA

For Each i In WSData.Range("A7", WSData.Range("A7").End(xlDown)).Cells 
    If i.Offset(0, 3).Value >= 98 Then 
     i.EntireRow.Delete 
    End If 
Next 

Und die Werte in der Tabelle sind Dezimalwerte nur mit dem% -Zeichen.

enter image description here

Ich versuchte „> 97.99“, weil Excel einige Probleme mit Floating-Point-Vergleich hat, aber es funktioniert immer noch nicht genau zu vergleichen.

Hier ist, was es nach der Verwendung von Selection.Value zeigt. enter image description here

enter image description here

+0

Sie müssen dann eine benutzerdefinierte Maske auf die Zahlen haben. So etwas wie "00.00"% "' was bedeutet, dass die Zahlen keine wahren Prozentsätze sind, sondern die Anzahl der Mascara als Prozentsätze. –

+0

Nein. Das sind Werte in den Hunderten. Ich habe wieder auf> = 98.00 gewechselt und es funktioniert! Vielen Dank. – Dombey

Antwort

4

Prozent dezimal sind mit ganzen Zahlen dargestellt. Zum Beispiel werden 100,00% als 1 und 98,01% als .9801 gespeichert.

Dafür Sie die Schwelle anpassen müssen:

For Each i In WSData.Range("A7", WSData.Range("A7").End(xlDown)).Cells 
    If i.Offset(0, 3).Value >= .98 Then 
     i.EntireRow.Delete 
    End If 
Next 

Das zweite Problem ist, dass, wenn Löschen von Zeilen ist es am besten rückwärts zu durchlaufen. Anderenfalls könnten einige Zeilen fehlen, da beim Löschen jeder Zeile die Zeile nach oben verschoben wird und die nächste Iteration die nächste Zeile überspringt.

i Wechsel von einem Bereich auf einen langen und verwenden diese:

For i = WSData.Range("A7").End(xlDown).row to 7 Step -1 
    If WSData.Cells(i,3).Value >= .98 Then 
     Row(i).Delete 
    End If 
Next 

Edit: Da es scheint gibt es eine benutzerdefinierte Maske auf das Zahlenformat, die Zahlen zwingen aussehen Prozent dies versuchen:

Wenn dies funktioniert, war Ihr Hauptproblem, dass Sie Spalte D betrachtet haben. Der Offset ist additiv. Also, wenn Sie .offset(0,3) es bewegte drei Spalten aus der Spalte A. 1 + 3 ist 4.

+0

Danke für den Fang @tigeravatar –

+1

@Dombey Wenn Sie Zeilen löschen, müssen Sie von der Unterseite des Bereichs arbeiten, sonst wird Ihr Algorithmus nicht funktionieren. Wenn Sie das tun und immer noch 24,75% usw. löschen, dann gibt es etwas Schlampiges an Ihren Daten. –

+0

@Dombey Dann haben Sie eine Mischung aus Zahlen und Text, die wie Zahlen aussehen. –