基本方程
(J3+x)/150
将答案乘以然后x
除以150
并重复
( ((J3+x)/150)x )/150
(( ( ((J3+x)/150)x )/150 )x)/150
不断重复,直到最后一次重复的答案为<=1
。将所有部分相加。
也许从视觉上看可以更好地解释这一点。
现在我只是将等式分解成几个单元格然后对它们求和,但是这样做效率极低。
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
将以下内容用户定义函数 (UDF)在标准模块中:
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
用户定义函数 (UDF) 非常容易安装和使用:
- ALT-F11 打开 VBE 窗口
- ALT-I ALT-M 打开新模块
- 粘贴内容并关闭 VBE 窗口
如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除 UDF:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要从 Excel 使用 UDF:
=deflime(A1,B1)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其工作!
以下是一个例子:
答案2
我看到您有一个 VBA 解决方案,但可以使用公式来实现。
假设你的“x”值在 J2 中,将此公式放入 J4 中,以得出首次使你达到 <= 1 的迭代次数
=MATCH(TRUE,(J3+J2)/150^{1,2,3,4,5,6,7,8,9,10}*J2^{0,1,2,3,4,5,6,7,8,9}<=1,0)
然后使用 J5 中的这个公式来获得最终值
=SUMPRODUCT((J3+J2)/150^ROW(INDIRECT("1:"&J4))*J2^(ROW(INDIRECT("1:"&J4))-1))
第一个公式将你限制为 10 次迭代,但你可以根据需要扩展它……甚至可以将这两个公式合并为一个“超级公式”
在我的测试中,这些公式给出的结果与 Gary's Student's UDF 的结果相同