Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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