Wie kann das SUM in der Gleichung wiederholt werden, bis die Antwort kleiner oder gleich 1 ist?

583
deflime

Basisgleichung

(J3+x)/150 

Multiplizieren Sie die Antwort xund teilen Sie dann alle durch 150und wiederholen Sie sie

( ((J3+x)/150)x )/150 (( ( ((J3+x)/150)x )/150 )x)/150 

Wiederholen Sie dies so oft, bis die Antwort auf die letzte Wiederholung lautet <=1. Alle Teile zusammenfassen.

Wenn Sie dies visuell sehen, wird es vielleicht besser erklärt. enter image description here

Im Moment habe ich die Gleichung einfach in mehrere Zellen aufgeteilt und diese dann summiert, aber das ist furchtbar ineffizient.

A1: =(J3+x)/150 B1: =(((J3+x)/150)x)/150 C1: =(( (((J3+x)/150)x)/150 )x)/150 D1: =(( (( (((J3+x)/150)x)/150 )x)/150 )x)/150 E1: etc, etc 
1
Kann entweder J3 oder x negativ sein? fixer1234 vor 9 Jahren 0
Das würde niemals passieren. deflime vor 9 Jahren 0
Dies erfordert eine VBA-Lösung. FYI, x muss <150 sein oder es wird niemals ein Ausdruck <= 1 geben. fixer1234 vor 9 Jahren 0
Richtig, "x" soll 150 nicht überschreiten. deflime vor 9 Jahren 0
Kann ich überprüfen, ob ich dieses Recht habe? Wenn zum Beispiel J3 = 10.000 und x = 20 ist, dann ist A1 = 66,8, B1 = 8,9, C1 = 1,19 und D1 = 0,16. Da der letzte Wert <1 ist, möchten Sie diese 4 Werte einfach summieren und erhalten ein Ergebnis 77,05 (ungefähr)? barry houdini vor 9 Jahren 0
Das ist genau richtig In meiner Arbeitsmappe umfasst es derzeit 8 Zellen, und wie Sie sich vorstellen können, schwankt dies bei einer mäßigen Änderung in 'x'. deflime vor 9 Jahren 0

2 Antworten auf die Frage

2
Gary's Student

Fügen Sie die folgenden benutzerdefinierten Funktionen (UDF) in ein Standardmodul ein:

Public Function deflime(J3 As Variant, x As Variant) As Double deflime = 0 result = (J3 + x) / 150 For i = 1 To 9999 deflime = deflime + result If result <= 1 Then Exit Function End If result = x * result / 150 Next i End Function 

Benutzerdefinierte Funktionen (UDFs) sind sehr einfach zu installieren und zu verwenden:

  1. ALT-F11 öffnet das VBE-Fenster
  2. ALT-I ALT-M öffnet ein neues Modul
  3. Fügen Sie das Zeug ein und schließen Sie das VBE-Fenster

Wenn Sie die Arbeitsmappe speichern, wird die UDF damit gespeichert. Wenn Sie später als 2003 eine Version von Excel verwenden, müssen Sie die Datei als .xlsm statt als .xlsx speichern

So entfernen Sie die UDF:

  1. Öffnen Sie das VBE-Fenster wie oben
  2. Löschen Sie den Code
  3. Schließen Sie das VBE-Fenster

So verwenden Sie die UDF aus Excel:

=deflime(A1,B1) 

Weitere Informationen zu Makros im Allgemeinen finden Sie unter:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

und

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

und Einzelheiten zu UDFs finden Sie unter:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

Makros müssen aktiviert sein, damit dies funktioniert!

Hier ist ein Beispiel:

enter image description here

0
barry houdini

Ich sehe, dass Sie eine VBA-Lösung haben, aber dies ist mit Formeln möglich.

Angenommen, Ihr "x" -Wert ist in J2. Setzen Sie diese Formel in J4, um die Anzahl der Iterationen anzugeben, die Sie zum ersten Mal auf <= 1 bringen

=MATCH(TRUE,(J3+J2)/150^*J2^<=1,0)

und dann diese Formel in J5, um den endgültigen Wert zu erhalten

=SUMPRODUCT((J3+J2)/150^ROW(INDIRECT("1:"&J4))*J2^(ROW(INDIRECT("1:"&J4))-1))

Die erste Formel beschränkt Sie auf 10 Iterationen, aber Sie können dies gegebenenfalls erweitern ... oder sogar diese beiden Formeln zu einer "Megaformula" zusammenfassen.

In meinen Tests erzielten diese Formeln dieselben Ergebnisse wie die UDF von Garys Student