Excel If "Schleife"?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

(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

Woher ich das weiß:Berufserfahrung – Software-Entwickler

Iamiam  09.02.2016, 13:54

DH!, sehr schön auf alle Eventualitäten eingegangen!

=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


Suboptimierer  09.02.2016, 10:14

Das geht nicht, es sei denn man aktiviert die Iterationen in den Exceloptionen, da C2 sich mit der Formel auf sich selbst bezieht.

EGitarre  09.02.2016, 10:23
@Suboptimierer

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

Suboptimierer  09.02.2016, 10:33
@EGitarre

Ja und sorry für den ↓. Ist etwas zu hart, da du ja nur helfen wolltest.

EGitarre  09.02.2016, 10:35
@Suboptimierer

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
Woher ich das weiß:Berufserfahrung – Programmierer

PWolff  09.02.2016, 12:02

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.

Suboptimierer  09.02.2016, 12:07
@PWolff

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.

Suboptimierer  10.02.2016, 08:35
@PWolff

Hat sich mit dem nachmaligen Lesen der Frage alles erledigt? Weil sonst verstehe ich den Kommentar nicht.

maximilianus7  10.02.2016, 15:10
@Suboptimierer

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.

Suboptimierer  10.02.2016, 15:31
@maximilianus7

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.

maximilianus7  10.02.2016, 19:26
@Suboptimierer

@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.

Woher ich das weiß:Berufserfahrung – Berufserfahrung

LouisGoebel 
Beitragsersteller
 09.02.2016, 10:29

Ja ich habe auch ein zwei jahre C++ gemacht, aber das ist schon ne Weile her...