Excel If "Schleife"?

4 Antworten

Vom Fragesteller 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!

0

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

2
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

0
Suboptimierer  09.02.2016, 10:33
@EGitarre

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

1
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

0

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.

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

1
Suboptimierer  10.02.2016, 08:35
@PWolff

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

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

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

0
maximilianus7  10.02.2016, 19:26
@Suboptimierer

@Suboptimierer :

stimmt, du hast recht, mein beispiel war wohl zu einfach. 100 punkte an dich.

0

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 
Fragesteller
 09.02.2016, 10:29

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

0