Excel If "Schleife"?
Hallo ich bräuchte mal Hilfe bei einer Excel IF Schleife. Unswar habe ich 2 Zellen. C2 und C3 Der Wert, den man in C2 einträgt, wird in einer Rechnung verwendet. Man soll aber wahlweise auch in C3 einen Wert eingeben können. Und die Schleife soll dann folgendes machen:
Wenn C2 leer ist (bzw 0) soll der wert von C3 in die Zelle von C2 "kopiert" werden oder zumindest zugeordnet werden. Wie wäre hier der "Code"?
4 Antworten
(Bei Blöcken, die nicht für Wiederholungen vorgesehen sind, spricht man einfach von "Blöcken", hier also "If-Block".)
Eine Zelle wird als [Tabelle].Cells(Zeile, Spalte) angesprochen, C2 also als Cells(2, 3) und C3 als Cells(3, 3). (Wenn man sich im Code der betreffenden Tabelle befindet, braucht die Tabelle nicht angegeben zu werden.)
Code:
If IsEmpty(Cells(2, 3).Value) OR (Cells(2, 3).Value = 0) Then
'Wert von C3 übernehmen
End If
Oder, da dies zu Fehlern führen kann, wenn C2 einen Wert enthält, der sich nicht mit einer Zahl vergleichen lässt:
If Not IsEmpty(Cells(2, 3).Value) Then
'OK - nix tun
ElseIf Cells(2, 3).Value = 0 Then 'Hier kann immer noch ein Fehler auftreten ...
'OK - nix tun
Else
'Wert von C3 übernehmen
End If
oder entsprechend verfeinern, je nach Bedarf
=WENN(C2="";C3;"")
Sollte so klappen, ist zwar schon etwas her, dass ich so mit Excel gearbeitet habe, aber sollte klappen. Der Code muss in C2 kopiert werden
Stimmt, da war ja was.... Sehe grade, dass es sowieso keinen Sinn macht, was ich geschrieben habe, da ich mit der Formel ja keinen eigenen Zahlenwert mehr eintragen kann
Ja und sorry für den ↓. Ist etwas zu hart, da du ja nur helfen wolltest.
Downvotes sagen ja nicht aus, ob der gute Wille da ist, sondern ob das Hilfreich ist, von daher :P
Als Schleife würde ich eine If-Abfrage nicht bezeichnen. Schleifen verbinde ich mit Iterationen, also dass Code mehrfach durchlaufen wird (/werden könnte).
Der Code für dich:
If Range("C2").Value = 0 Then Range("C2").Value = Range("C3").Value
Funktioniert nur, wenn C2 tatsächlich leer ist oder eine Zahl enthält. Und auch dann nicht, wenn eine 0 in C3 ein gültiger Wert ist.
Edit: Hab noch mal die Frage gelesen - 0 wird ja ausdrücklich als gültiger Wert ausgeschlossen.
Man muss natürlich aufpassen, wohin man diesen Code schreibt. Wenn es an ein Change-Ereignis gehängt wird, kann man dadurch eine Endlosschleife erzeugen.
zuweisungen innerhalb eines macros lösen keine events aus - wenn du das meinst.
Veto. Ich bin schon das eine oder andere mal in die Falle getappt. Probier es mal aus.
Hat sich mit dem nachmaligen Lesen der Frage alles erledigt? Weil sonst verstehe ich den Kommentar nicht.
ausprobiert: genau das habe ich gemacht, BEVOR ich den kommentar geschrieben habe - jetzt bist du dran.
die falle kenne ich, wenn auch nicht als endlosschleide, sondern als unerwartetes verhalten.
Zuweisung im Makro löst Ereignis aus:
Sub StandardwertSetzen() If Range("C2").Value = 0 Then Range("C2").Value = Range("C3").Value End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Debug.Print "Ereignis Change wurde ausgelöst" End Sub
Endlosschleife durch unbedachtes Auslösen eines Ereignisses:
Private Sub Worksheet_Change(ByVal Target As Range) If Range("C2").Value = 0 Then Range("C2").Value = Range("C3").Value End Sub
Es entsteht dann eine Endlosschleife, wenn in C2 und C3 "" oder 0 steht und etwas im Tabellenblatt geändert wird.
@Suboptimierer :
stimmt, du hast recht, mein beispiel war wohl zu einfach. 100 punkte an dich.
Ich kenne mich nicht in Excel und VBA aus, wohl aber mit Programmierung allgemein.
Es gibt keine If-Schleife. If-Anweisung ist OK, If-Verzweigung trifft es auch.
Aber Schleifen sind zur wiederholten Abarbeitung von Programmcode unter Angabe einer Abbruchbedingung da. If verzweigt nur den Programmcode.
Ja ich habe auch ein zwei jahre C++ gemacht, aber das ist schon ne Weile her...
Das geht nicht, es sei denn man aktiviert die Iterationen in den Exceloptionen, da C2 sich mit der Formel auf sich selbst bezieht.