【问题标题】:Can you make Excel formula's iterate and count loops你能让 Excel 公式迭代和计数循环吗
【发布时间】:2016-08-12 00:29:00
【问题描述】:

我几乎可以肯定答案是否定的,但我想我会问这里的人,以防万一我还没有找到一些神奇的公式......

假设我有一个值表;

我在某个地方还有另一个单元格(假设这个单元格是 A1,以我的示例为例),其中有另一个数字。这个数字实际上是一个百分比(在这个例子中我们称之为 20%)

所以我有一个看起来像这样的表

      A     B     C     D     E
1 |  20
2 |
3 | Number
4 |  23
5 |  68
6 | 145
7 |   8

解释它的最简单方法是说我将按单元格 A1 中给出的百分比(在我的示例中为 20%)减少每个数字。然后我将重复(因此将新值再减少 20%),直到答案为零(在此示例中舍入为 2dp,尽管稍后我可能需要或多或少的舍入)。 我正在尝试计算公式必须运行多少次才能使值变为 0

就像我说的,我几乎可以肯定这不能在脚本(VBA 等)之外完成,因为据我所知,excel 公式不能循环和计数??

我也确信这实际上是一个相当简单的脚本(虽然我根本不了解 VBA,所以我做起来并不容易)。我确信我可以用其他语言做到这一点。但这并没有真正的帮助,因为我正在尝试完全在 excel 中完成此操作。

我使用复制下来的另一张纸上的公式非常不雅地完成了它(A1 取原始值的百分比,A2 取 A1 值的百分比等),然后我可以看到哪个行号值达到 0,但我只是想知道是否有更有效的解决方案; a) 不使用 VBA b) 使用 VBA 正确执行此操作(不重要,但如果有人可以,我想看看它是如何完成的)

谢谢

【问题讨论】:

    标签: excel vba loops excel-formula


    【解决方案1】:

    我的解决方案是直接计算答案。

    您正在寻找的东西是 0 舍入到小数点后 2 位,所以 你的公式就变成了

    0.0049 = A4 *(1-A1)^n

    ln(0.0049) = ln(A4)+ n*ln(1-A1)

    n = (ln(0.0049)-ln(a4))/ln(1-A1)

    由于您需要整数个循环,因此您需要将下一个数字取高,因此最终方程为

    =ceiling((ln(0.0049)-ln(a4))/ln(1-A1),1)
    

    (1-A1)指的是一次迭代后还剩下多少。

    你说 A1 是百分比。如果你在 excel 中输入 20%,它被视为 0.2。

    原来的公式应该是

    0.0049 = A4*(0.8)^n

    【讨论】:

    • 我输入了一些类似的东西来表明这确实可以用一个公式来完成,+1
    • 我想我得到了第一部分(尽管我认为 0 舍入到小数点后 2 位
    • 在上面添加了 cmets
    • 感谢您的编辑...看看我现在哪里出错了...这是一个百分比,但仅表示为一个数字(单元格值是'20',而不是 20%'所以我最终得到了 ln(-19),这是无效的。我现在添加了 '%',一切都很好......谢谢
    【解决方案2】:

    Excel 使用某种“线性计算模型”,其中单元格中的公式使用函数和引用根据其他单元格的值确定单元格的值。 Excel 维护一个依赖关系图,每当单元格更改值时,它会递归地重新计算所有依赖项(因此依赖项的依赖项也会重新计算)。

    Excel 在此模型中提供的唯一迭代是在公式的函数内。

    我相信在 Excel 中可以定义一个用户函数,您可以在单元格的公式中使用该函数。您需要的任何迭代都可以通过此函数执行(在 VBA 中)。

    (Ps:Excel 提供的另一个迭代是在循环引用中,当一个单元格的依赖项在零个或多个步骤之后返回到单元格作为其自身的依赖项时。Excel 会标记这一点,但我相信可能允许这样做并指示 Excel 执行多少次迭代。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-28
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2020-05-05
      • 2022-11-03
      相关资源
      最近更新 更多