VBA - Nachkommastellen werden automatisch gerundet
#1
Hallo,

wohl für die Meisten ein kleines Problem ...
Ich habe folgende Schleife konstruiert:

Dim i As Variant
    With ActiveSheet
      For i = 217 To 2 Step -1
         If Val(.Cells(i, 22).Value) = "0." Then .Rows(i).Delete
      Next
   End With

Funktioniert soweit, nur werden Zelleinträge mit 0 und Nachkommastellen automatisch abgerundet und somit auch mit gelöscht.
Wie lautet bitte der genaue Befehl?

Danke und lieben Gruss … Elmar
Antworten Top
#2
Hallöchen,

Da Du mit Val eine Zahl wiedergibst, solltest Du auch mit einer Zahl vergleichen, also mit 0 und nicht mit "0.".
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Herzlichen Dank für deine Rückmeldung,

deine Überlegung ist sicher richtig und habe ich auch schon ausprobiert.
Trotzdem befinden sich in meiner Tabelle zwei Beträge < 1   (0,10 und 0,90) und die werden mit gelöscht.
Das sollte so nicht sein.

Trotzdem Danke … vielleicht hast noch eine andere Idee.

lg. Elmar
Antworten Top
#4
Moin!
Warum filterst Du Spalte V nicht nach 0 und löscht die sichtbaren Zeilen?
Dürfte auch erheblich schneller als die Schleife sein.

Ansonsten zeige mal die Datei.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
Hallöchen,

mit
If Val(.Cells(i, 22).Value) = "0" Then .Rows(i).Delete
sollten nur 0-Werte gelöscht werden. Es gibt eventuell einen Stolperstein mit dem Dezimaltrennzeichen.
z.B.
0,11 liefert bei Val 0
0.11 liefert bei Val 0,11

ich würde da eventuell erst mal auf isnumber prüfen und wenn ja, direkt vergleichen.
Ist es Text, dann ggf. was in der Art val(replace(.cells(…),",","."))

if isnumber(.Cells(…)) then
if .cells(…)=0 then
else
if val(replace(.cells(…),",",".")) = 0 then ...
end if
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Hüstel!
IsNumeric()
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • schauan
Antworten Top
#7
Hallo und danke ...

so habe ich's hinbekommen:

With ActiveSheet
      For i = 217 To 2 Step -1
      If Val(Replace(.Cells(i, 22), ",", ".")) = 0 Then
      If Val(.Cells(i, 22).Value) = 0 Then .Rows(i).Delete
      End If
      Next
   End With

Herzlichen Dank nochmals … hast mir sehr geholfen.

lg. Elmar
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste