如何获取Excel以添加小分数

问题描述

因此,这可能比编码更像是一个数学问题,但希望您仍然可以提供帮助。基本上,我希望Excel计算逐渐变大的分数列表,例如1/265 + 1/264 + 1/263 + ..... 1 / n其中n是do while循环中的最终数字。

但是,每次我运行此宏时,我只会得到0反馈给我。我弄乱了所有数字,并意识到,如果我将分数从1/50开始,它将起作用,但是任何较小的分数,即使是1/51,无论它将产生0,都将变为零。看来,当小数变为小VBA时,只会将其识别为零并拒绝使用它。这是其他任何人都熟悉的东西吗?还是对系统的限制?

如果有人要测试它,我在下面列出了一些数字,可以用来代替r以及最终输出应该是什么(仅供参考,该公式绝对正确)。

r;答案(四舍五入):

46; 50

99; 124

156; 235

Sub DoWhile()

Dim i As Integer
i = 6

do while Cells(i,5).Value <> ""

Dim r As Variant
r = Cells(i,5).Value

Dim a As Integer
a = 265

Dim z As Integer
z = 0

Dim x As Integer
x = a


    do while (x >= (a - r + 1))

        z = z + (1 / x)
        x = x - 1

    Loop

Cells(i,6).Value = (z) * (a)
i = i + 1

Loop


End Sub

解决方法

您实际上并不需要VBA。

E6: Your "counter",eg `46`

Excel O365:

=SUM(1/SEQUENCE(E6,265,-1))*265

早期版本:

=SUMPRODUCT(1/ROW(INDEX($A:$A,265):INDEX($A:$A,265-E6+1)))*265
,

@FunThomas在评论中提到:

Integer Integer ,这意味着它们不包含余数。 z = z + (1 / x)始终为零,因为当您没有余数时,1 / x为零。更改为数据类型Double

我需要将Integer更改为Double,并且效果很好。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...