HERBERS Excel-Forum - das Archiv

Thema: wenn - Formel als Makro | Herbers Excel-Forum

wenn - Formel als Makro
meixner

Hallo zusammen,
möchte untere Wenn - Formel als Makro formulieren. Kann mir jemand dabei helfen wie das funktioniert.
Vielen Dank.
Dani
=WENN(ODER(A8=1;A8=2;A8=3;A8=4;A8=5;A8=6;A8=7;);0;RUNDEN((K8*H8/Q8)/O8;))

siehe Select Case Anweisung owT
Rudi

AW: wenn - Formel als Makro
IngGi

Hallo Dani,
die Formel - und damit auch das Makro - ließe sich natürlich im konkreten Beispiel weitaus einfacher und eleganter gestalten. Statt auf alle Zahlen von 1 bis 7 zu prüfen, könnte man einfach auch auf <=7, >=1 und ganze Zahl prüfen. Aber ich denke mal, das ist nur ein etwas unglücklich gewähltes Testbeispiel und es geht dir generell um die Struktur des Makros.
Nachfolgendes Makro sieht nicht besonders professionell aus, da ich jede einzelne Zahl in einer _ eigenen If - Zeile prüfe. Man könnte auch alle Zahlen in einer If - Zeile prüfen und die Prüfungen dabei mit OR verknüpfen, also

If Range("A8") = 1 Or Range("A8") = 2 ... Then
Das wäre allerdings die langsamere Variante (was natürlich auch nur zum Tragen kommt, wenn die gesamte If - Struktur nicht nur einmal, sondern vielfach durchlaufen wird). Der Grund dafür ist der, das dann bei jedem Durchlauf der If - Struktur immer jeweils alle Bedingungen geprüft werden würden. Wenn man dagegen jede Prüfung in eine eigene If - Zeile steckt, dann werden die nachfolgenden Bedingungen erst gar nicht mehr geprüft, sobald eine Bedingung nicht erfüllt ist. Das Makro steigt dann immer sofort aus der gesamten If - Struktur aus.
Die Zelle X500 wäre im Beispiel die Zelle, in der deine Formel stehen würde:
Dim blnErfuellt As Boolean

If Range("A8") = 1 Then
  If Range("A8") = 2 Then
    If Range("A8") = 3 Then
      If Range("A8") = 4 Then
        If Range("A8") = 5 Then
          If Range("A8") = 6 Then
             If Range("A8") = 7 Then
              Range("X500") = Round((Range("K8") * Range("H8") / _
                Range("Q8")) / Range("Q8"), 0)
              blnErfuellt = True
             End If
          End If
        End If
      End If
    End If
  End If
End If

If Not blnErfuellt Then
  Range("X500") = 0
  blnErfuellt = False
End If
Code eingefügt mit VBA in HTML 2.0.0.3
Gruß Ingolf
Korrektur
IngGi

Hallo Dani,
sorry, der Code muss natürlich so heißen:
Dim blnErfuellt As Boolean

If Range("A8") = 1 Then
  If Range("A8") = 2 Then
    If Range("A8") = 3 Then
      If Range("A8") = 4 Then
        If Range("A8") = 5 Then
          If Range("A8") = 6 Then
             If Range("A8") = 7 Then
              Range("X500") = Round((Range("K8") * Range("H8") / _
                Range("Q8")) / Range("Q8"), 0)
              blnErfuellt = True
             End If
          End If
        End If
      End If
    End If
  End If
End If

If Not blnErfuellt Then
  Range("X500") = 0
Else
  blnErfuellt = False
End If
Code eingefügt mit VBA in HTML 2.0.0.3
Gruß Ingolf
das ist UND nicht ODER owT
Uduuh

AW: Korrektur
meixner

klappt! vielen Dank Ingolf.
Viele Grüße
Dani