Herbers Excel-Forum - das Archiv

Schleife mit Wenn-Formel programmieren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Schleife mit Wenn-Formel programmieren
von: proxima05

Geschrieben am: 04.01.2007 15:08:10
Hallo,
mit dem folgenden Code trage ich in die Zelle A14 und B14 jeweils eine Formel (Formula1/2) ein, was auch funktioniert.
========================================
Private Sub CommandButton1_Click()
Dim Formula1 As String
Dim Formula2 As String
Formula1 = "=IF(AND(R[-1]C<R5C2*R7C2,R[-9]C[1]<1),R[-12]C[1],IF(INT(R[-9]C[1])=R[-9]C[1],1,R[-1]C+R[-9]C[1]-(INT(R[-9]C[1]))))"
Formula2 = "=IF(RC[-1]<R5C2*R7C2,R4C2*R3C2/R7C2,IF(RC[-1]=R5C2*R7C2,R4C2*R3C2/R7C2+R3C2,""""))"
If OptionButton1.Value = True Then
Range("A14").Select
ActiveCell.FormulaR1C1 = Formula1
Range("B14").Select
ActiveCell.FormulaR1C1 = Formula2
End If
End Sub

========================================
Jetzt möchte ab A15 eine Formel einfügen, die in der Bearbeitungszeile wie folgt aussieht:
=WENN(A14<$B$5*$B$7;A14+1;"")
(Den VBA-Code habe ich bereits für die Formel)
Diese soll in den darunterliegenden Zellen (A16, A17 ...) eingetragen werden, solange "B5*B7" kleiner als die jeweils darüber liegende Zelle (also für A16 die Zelle A15, für Zelle A17 die Zelle A16 und so weiter ...). Das Eintragen der Formel soll solange laufen, bis der Wert in der jeweilen Zelle A gleich dem Wert B5*B7 ist.
Ich wollte das über eine "Do ... Until"-Schleife realisieren, was aber nicht ganz funktioniert:
==================
Range("A15").Select
i = 1
Do Until ActiveCell.Value = B5 * B7
For i = 1 To zz
ActiveCell.Offset(1, 0).Select
Next i
Selection.ActiveCell.FormulaR1C1 = Formula3
i = 1
Loop
==================
Kann mir jemand sagen, was ich da falsch mache.
Besten Dank für Hilfe,
Gruß
Ralph
Bild

Betrifft: AW: Schleife mit Wenn-Formel programmieren
von: fcs

Geschrieben am: 04.01.2007 15:39:35
Hallo Ralph,
Fehler:
1. B5 und B7 sind bei dir Variablen die wahrscheinlich den Wert 0 haben. Also wird der Inhalt der aktiven Zelle auf B5*B7 = 0 geprüft. Du müsstest hier mit Range("B5") * Range("B7") arbeiten.
2. Hast du der Variablen zz irgendwo einen Wert zugewiesen?
Die For-Next-Schleife hilft dir hier meiner Meinung nach aber eh nicht weiter.
Kein Fehler, aber "Select" und "Selection" sollte man in VBA möglichst vermeiden und die entsprechenden Objekte direkt ansprechen.
Probiere mal folgende Variante um die Formeln einzutragen:
Range("A15").FormulaR1C1 = Formula3
Zeile = 16
Do Until Cells(Zeile - 1, "A") > Range("B5") * Range("B7")
Cells(Zeile, "A").FormulaR1C1 = Formula3
Zeile = Zeile + 1
Loop

Gruß
Franz
Bild

Betrifft: AW: Schleife mit Wenn-Formel programmieren
von: proxima05

Geschrieben am: 04.01.2007 16:08:05
Hallo Franz,
danke für Deine schnelle Antwort. Der Code funktioniert so. Jetzt habe ich noch eine Frage zum Verständnis. B5 und B7 enthalten Werte, die nicht 0 sind, sondern deren Produkt die Obergrenze des Wertes darstellt, der in den Zellen A14 ff. dargestellt wird. Das bedeutet doch, dass Du den umgekehrten Ansatz gehst, sobald der Wert größer als das Produkt ist, oder?
Welche Anweisung sorgt für das Erweitern der Formula3? ... geschieht das über "Zeile = Zeile +1"?
Ansonsten ist der code echt klasse! :-)
Besten Dank & Gruß
Ralph
Bild

Betrifft: AW: Schleife mit Wenn-Formel programmieren
von: fcs

Geschrieben am: 04.01.2007 17:10:18
Hallo Ralph,
es gibt verschiedenen Schleifen-Konstruktionen (Do..Loop, While ... Wend), die entsprechende Bedingungen erfordern, damit die Schleife beendet wird.
Man muss die Bedingung halt so formulieren, dass der Schleifenausstieg in der gewünschten Form klappt :). Eine scheinbar klare verbale Formulierung heißt noch nicht automatisch, dass man sie in VBA auch in gleicher Weise so umsetzen kann.
Mit
Zeile = Zeile + 1
wird dafür gesorgt, dass das Makro in der Schleife immer jeweils die nächste darunterliegende Zelle bearbeitet.
Gruß
Franz
Bild

Betrifft: AW: Schleife mit Wenn-Formel programmieren
von: poxiam05
Geschrieben am: 04.01.2007 17:36:11
Danke für die Erklärung!
Problem gelöst! :) ... auf zum nächsten! ;-)
Ralph
Bild

Betrifft: AW: Schleife mit Wenn-Formel programmieren
von: Daniel Eisert

Geschrieben am: 04.01.2007 15:50:11
Hallo
du meinst doch sicherlich
Do Until ActiveCell.Value = Range("B5").value * Range("B7").value
anstelle von
Do Until ActiveCell.Value = B5 * B7
außderdem ist
Do while ActiveCell.Value < Range("B5").value * Range("B7").value
sicherer,denn falls es mal keine Zelle gibt, die genau gleich B5*B7 ist, läuft die Schleife ewig. Diese schleife würd ich mir auch sparen:
For i = 1 To zz
ActiveCell.Offset(1, 0).Select
Next i

warum schreibst du nicht einfach
activecell.offest(zz,0).select
Gruß, Daniel
 Bild
Excel-Beispiele zum Thema "Schleife mit Wenn-Formel programmieren"
In einer Schleife auf Elemente einer UserForm zugreifen CheckBoxes in UserForms in eine Schleife einbinden
Gruppe von UserForm-ListBoxes über eine Schleife ansprechen UserForm-Optionsfelder über eine Schleife zurücksetzen
Beispiel für die Anwendung der SUMMEWENN-FORMEL Eine WENN-Formel nur bei der ersten Werteänderung berechnen