Registriert seit: 29.01.2017
Version(en): 2013
Hallo,
vielleicht könnt Ihr mir ja helfen, ich komm echt nicht weiter. Also geht um folgenden Code:
Sub test()
If Worksheets("Rechner").Cells(15, 3) <= "500" Then Worksheets("Rechner").Cells(16, 3) = "45" If Worksheets("Rechner").Cells(15, 3) <= "1000" Then Worksheets("Rechner").Cells(16, 3) = "80" If Worksheets("Rechner").Cells(15, 3) <= "1500" Then Worksheets("Rechner").Cells(16, 3) = "115"
End Sub
Die erste Zeile mit dem Berich bis 500 funktioniert einwandfrei. Die zweite Zeile bis 1000 funktioniert gar nicht, von 501 bis 999 gibt es mir gar nichts aus und bei 1000 wird 115 ausgegeben (obwohl es 80 sein müsste). Die dritte Zeile funktioniert zwar wieder, jedoch gibt es mir bei über 1500 auch 115 aus.
Hat jemand eine Idee?
Vielen Dank
Basti
Registriert seit: 12.04.2014
Version(en): Office 365
Hallo
mal grundsätzlich:
willst du Zahlen oder Text vergleichen?
MfG Tom
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo, in solchen Fällen ist Select Case einfacher zu handhaben. Code: Sub test() With Worksheets("Rechner") .Cells(16, 3).ClearContents 'erst einmal die Zelle leeren Select Case .Cells(15, 3).Value Case 0 To 500 .Cells(16, 3) = 45 Case 501 To 1000 .Cells(16, 3) = 80 Case 1001 To 1500 .Cells(16, 3) = 115 End Select End With End Sub
Ich wollte Dich auch darauf hinweisen, dass man Zahlen nicht in Anführungszeichen schreibt. Dann können sie als Text gewertet werden.
Gruß Atilla
Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:1 Nutzer sagt Danke an atilla für diesen Beitrag 28
• Basti5
Registriert seit: 29.01.2017
Version(en): 2013
Hallo,
@ Tom die Zellen sollen als Währung formatiert sein.
@ Atilla , werde ich mal versuchen und danke vlt liegt es ja wirklich an den Anführungszeichen. Ich Versuchs gleich mal.
VG
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo Basti, ich glaube nicht das dein Problem mit Text zu tun hat (den Fehler gibt es auch!) Hier liegt m.E. ein rein logischer Denkfehler vor, auf den ich auch schon öfter reingefallen bin. Du wertest <= aus!! Beachte bitte die korrekte Reihenfolge der Auswertung!! Excel tut das grundsaetzlich auch!! Und fragt nicht danach ob Du logisch richtig programmiert hast?? Dreh das ganze bitte mal so um: ich hoffe du erkennst selbst den grundlegenden Unterschied!! Okay ...?? mfg Gast 123 (Erfahrung ist die Summe aller Fehler! Ich habe schon viel Erfahrung gesammelt ... hi hi hi)Code: If Worksheets("Rechner").Cells(15, 3) <= "1500" Then Worksheets("Rechner").Cells(16, 3) = "115" If Worksheets("Rechner").Cells(15, 3) <= "1000" Then Worksheets("Rechner").Cells(16, 3) = "80" If Worksheets("Rechner").Cells(15, 3) <= "500" Then Worksheets("Rechner").Cells(16, 3) = "45"
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo, Deine Variante ginge, wenn du die Reihenfolge änderst: Code: Sub test2() Cells(16, 3).ClearContents If Worksheets("Rechner").Cells(15, 3) <= 1500 Then Worksheets("Rechner").Cells(16, 3) = 115 If Worksheets("Rechner").Cells(15, 3) <= 1000 Then Worksheets("Rechner").Cells(16, 3) = 80 If Worksheets("Rechner").Cells(15, 3) <= 500 Then Worksheets("Rechner").Cells(16, 3) = 45 End Sub
Bei einer Zahl kleiner 501 würde in die Zelle nacheinander, zuerst 115 dann 80 und am Ende 45 geschrieben. Als Ergebnis ist es richtig. In disem fall auch unerheblich, dass die Zelle mehrmals beschrieben wird. Muss man aber nicht machen, wenn es eine saubere Lösung gibt.
Gruß Atilla
Registriert seit: 29.01.2017
Version(en): 2013
Hey,
dann werde ich mal die Reinfolge wechseln.
Aber die Sache mit dem Select Case klappt auch sehr gut, wahrscheinlich werde ich damit weiterarbeiten.
Ich bedanke mich vielmals bei euch für die Hilfe.
Viele Grüße
Basti
Registriert seit: 12.03.2016
Version(en): Excel 2003
Danke Kollegen,
Zahlen als Text ist mir noch garnicht aufgefallen. Hut ab vor euch. Liege ich mit meiner Beobachtung richtig das die If Then Reihenfolge nicht stimmt??
@Attila völlig korrekt das die Reihenfolge bei Case richtig ist. Da wird jeder Fall nur einmal ausgewertet! Bei If Then, so wie er es aufgebaut hat, eben dreimal, völlig unabhaengig vom vorherigen Ergebnis! Der kleine, aber feine Unterschied!
mfg Gast 123
Registriert seit: 14.04.2014
Version(en): 2003, 2007
(18.02.2017, 23:30)Gast 123 schrieb: @Attila völlig korrekt das die Reihenfolge bei Case richtig ist. Da wird jeder Fall nur einmal ausgewertet! Bei If Then, so wie er es aufgebaut hat, eben dreimal, völlig unabhaengig vom vorherigen Ergebnis! Der kleine, aber feine Unterschied!
mfg Gast 123 Hallo, ich versteh jetzt nicht ganz, was Du meinst. Aber was Du schreibst ist nicht richtig. Wie Du und ich es auch gezeigt haben, erhält er bei geänderte Reihenfolge richtige Ergebnisse. Aber der Code arbeitet nicht immer alle If Abfragen durch!! Also nicht eben dreimal, wie du es schreibst. Bei Zahlen <=500 alle drei bei zahlen 501-1000 zwei bei Zahlen 1001 bis 1500 nur die erste If Abfrage.
Gruß Atilla
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo an alle @Atilla deine Lösung sehe ich als mit die beste an. Man kann sie auch mit If Then über ElseIf aufbauen: Ich erwaehne es nur um dem Frager die Vielzahl der Lösungsmöglichkeiten aufzuzeigen. Als Excel Grundkurs! Die Entscheidung was er nimmt liegt ganz allein bei ihm!! mfg Gast 123 Code: 'diese Variante entspricht der Case Select Methode If Worksheets("Rechner").Cells(15, 3) <= 500 Then Worksheets("Rechner").Cells(16, 3) = "45" ElseIf Worksheets("Rechner").Cells(15, 3) <= 1000 Then Worksheets("Rechner").Cells(16, 3) = "80" ElseIf Worksheets("Rechner").Cells(15, 3) <= 1500 Then Worksheets("Rechner").Cells(16, 3) = "115" End If
|