Frage von qwwqerqqwrqwr, 14

Excel Macro das sich automatisch aktiviert?

Hi ich möchte folgendes in excel verwirklichen. ich möchte folgende Funktion so lange laufen lassen und die werte in einer Tabelle ausgeben bis ein zielfunktionswert erreicht ist

=Abrunden(1+i*Zelle)<Wert das soll solange ablaufen bis eben die Bedingung nicht mehr wahr ist. Jeder Wer für den es wahr ist will ich in einer zeile ausgeben... wie geht das

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Oubyi, Community-Experte für Excel, 9

Also MIR reicht das bisschen nicht, um wirklich zu verstehen, was Du willst.
Aber zu meiner Übung habe ich mal ein Makro erstellt, das zumindest in die Richtung gehen sollte:

Sub Test()
Dim i As Integer
Dim rngZelle As Range
Dim rngWert As Range
Dim dblZelle As Double
Dim dblWert As Double
Dim dblGerundet As Double
Set rngZelle = Range("A1")
Set rngWert = Range("B1")

dblZelle = rngZelle.Value
dblWert = rngWert.Value

i = 1
dblGerundet = Application.WorksheetFunction.RoundDown(1 + i * dblZelle, 0)

Do
Cells(i, 3).Value = dblGerundet
i = i + 1
dblGerundet = Application.WorksheetFunction.RoundDown(1 + i * dblZelle, 0)
Loop While dblGerundet <= dblWert

End Sub

Schau es Dir mal an und beschreibe GENAU, was ich richtig verstanden habe und was Du anders haben möchtest.

Kommentar von qwwqerqqwrqwr ,

Vielen Dank, dass sieht schon überragend aus. Tut mir leid für die schlechte Beschreibung, habe gestern zu viel bekommen.

Also nochmal eine vernünftigen Beschreibung:

Wenn der Benutzer das Excel-Blatt aufruft, kann er in Zelle B64 einen Wert eingeben, dieser bietet die obere Grenze.

Im Anschluss soll bei i=0 beginnend die Excel Funktion

=Abrunden(1+i*B64;0) ausgeführt werden und die Berechnung in D64-DXX ausgegeben werden.

Abbruchbedingung soll sein wenn die Bedienung 

Abrunden(1+i*B64;0)<B65 nicht mehr erfüllt ist.

Ist es so verständlich?

Falls ja, wie binde ich ein Macro in Excel ein? Vielen Dank!!!!

Kommentar von Iamiam ,

@ Oubyi: DH! (habe selbst die AW auf die lange Bank geschoben, weil das doch erhebliche Konzentration braucht).

Aber geht denn

Do

Loop while (Bedingung) ?

Hab das immer mit

Do

Until Negierte Bedingung 

gemacht oder mit

While Bedingung

Wend

(mag das jetzt nicht ausprobieren)

@ qww...: Da Du ein Ereignismakro willst: Makro heißt anstatt Test:

Sub Worksheet_Change(ByVal Target as Range)

if not intersect(Target, Range("B64")) is nothing then

'hier obiges µ ab Zeile2...ersetze im Makro Range("B1") durch Target und Range("A1") durch den gewünschten Ziel-Anfangsort (drunter wird alles überschrieben durch die Zwischenergebnisse!)

und füge end if: vor End Sub ein

So bindest Du das ein: Blatt auswählen, Alt+F11, Doppelklick auf Blattnamen, Makro ins sich öffnende Fenster reinkopieren (unterhalb ggf erscheinender Einträge) als .xlsm speichern(!!!)

Kommentar von Oubyi ,

@lamiam:
Do...Loop while funktioniert tadellos.
Do...Until ist natürlich eine Alternative.

@qww...:
lamiam hat ja schon auf Ereignismakros hingewiesen.
Also:
Mach mal einen Rechtsklick auf den Tabellenreiter (unten, da wo z.B. Tabelle1 steht) und gehe dann auf "Code anzeigen...".
In das große Fenster des VBA-Editors, der sich dann öffnet kopierst Du folgenden Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B64")) Is Nothing Then
Dim i As Integer
Dim dblGerundet As Double

i = 0
dblGerundet = Application.WorksheetFunction.RoundDown(1 + i * Target.Value, 0)

Do
Cells(i + 64, 4).Value = dblGerundet
i = i + 1
dblGerundet = Application.WorksheetFunction.RoundDown(1 + i * Target.Value, 0)
Loop While dblGerundet <= Range("B65").Value
End If
End Sub

Da fehlt allerdings noch eine Fehlerbehandlung. Aber teste erstmal ob das so funktioniert, wie Du es Dir vorgestellt hast.

Kommentar von Oubyi ,

Danke fürs

Expertenantwort
von Iamiam, Community-Experte für Excel, 5

formal, der Fragesteller vergibt dann hoffentlich eine Hilfreichste!

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten