Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
832to836
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
832to836
832to836
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Schleife mit Wenn-Formel programmieren

Schleife mit Wenn-Formel programmieren
04.01.2007 15:08:10
proxima05
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 (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

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife mit Wenn-Formel programmieren
04.01.2007 15:39:35
fcs
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
Anzeige
AW: Schleife mit Wenn-Formel programmieren
04.01.2007 16:08:05
proxima05
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
AW: Schleife mit Wenn-Formel programmieren
04.01.2007 17:10:18
fcs
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
Anzeige
AW: Schleife mit Wenn-Formel programmieren
04.01.2007 17:36:11
poxiam05
Danke für die Erklärung!
Problem gelöst! :) ... auf zum nächsten! ;-)
Ralph
AW: Schleife mit Wenn-Formel programmieren
04.01.2007 15:50:11
Daniel
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 
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
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige