Arrays 循环内的错误计算

Arrays 循环内的错误计算,arrays,excel,vba,loops,immediate-window,Arrays,Excel,Vba,Loops,Immediate Window,全部,, 我从未遇到过像现在这样令人沮丧的事情。对于您在这个极其幼稚的问题上的帮助,我们将不胜感激。这个问题似乎很简单,但我太投入了,以至于我的眼睛看不到这个愚蠢的错误 (示例代码粘贴在下面-我使用了简化版本)。 我只是有一个两列数组X,我使用一个简单的循环来填充这个数组中的值。所有参数s,t,N都是常量,我从工作表中的其他单元格中检索它们,所以您可以忽略它们 问题 在第二个循环中,我填充数组X的元素。我用线性增加的值(0.01,0.02,0.03,…,30)填充第二列,第一列应该是第二列中这些

全部,, 我从未遇到过像现在这样令人沮丧的事情。对于您在这个极其幼稚的问题上的帮助,我们将不胜感激。这个问题似乎很简单,但我太投入了,以至于我的眼睛看不到这个愚蠢的错误

(示例代码粘贴在下面-我使用了简化版本)。 我只是有一个两列数组X,我使用一个简单的循环来填充这个数组中的值。所有参数s,t,N都是常量,我从工作表中的其他单元格中检索它们,所以您可以忽略它们

问题第二个循环中,我填充数组X的元素。我用线性增加的值(0.01,0.02,0.03,…,30)填充第二列,第一列应该是第二列中这些值和常数N,s,t的函数。听起来很简单

问题在于出于某种原因,第一列中的值出现错误!!我用Excel和Matlab进行了验证。例如,我取常数N、s、t和I的值,插入0.01,并在Excel和Matlab中计算第一列值,它们都给出了相同的正确结果(-0.1113)。当我运行VBA代码时,它给出了一个不同的值(0.36-我500%确定-0.1113是正确的答案)。 更奇怪的是,我在下一个j语句中插入了一个断点,对于j=1,我验证了所有常数的所有值,都是正确的,但X(j,1)仍然是0.36让我疯狂的是,当我粘贴与我在X(j,1)代码中使用的公式完全相同的公式,并将其粘贴到即时窗口中时,它给出了正确的值(-0.113)完全相同的公式。。零变化

有没有什么直观的原因可以导致这个问题?我检查了我的代码100万次,以确保参数名称中没有重复项,或者某些参数无法重置。没什么

*如果您有任何意见,我们将不胜感激。非常感谢,很抱歉这是一个愚蠢的问题

Sub Misc()

Dim N As Integer                
Dim s As Integer                
Dim t As Integer                
Dim j As Integer                
Dim i As Integer                
Const Step As Double = 0.01     
Const B As Integer = 30         
Dim X() As Double               


N = Range("AB1").End(xlDown).Row                      
s = WorksheetFunction.RoundDown(Sheets("Replacement").Range("AB1"), -1)     ' Compute S (Smallest meter reading, rounded down to nearest 10)
t = WorksheetFunction.RoundUp(Sheets("Replacement").Range("AB" & N), -1)    ' Compute T (Largest meter reading, rounded upto nearest 10)
Sheets("Replacement").Range("AD1").Value = s                                ' Export S and T to Sheet "Replacement" for subsequent use in Goal Seek
Sheets("Replacement").Range("AE1").Value = t

        For i = 1 To N Step 1
            Sheets("Replacement").Range("AC" & i).Formula = "=ln(AB" & i & ")"       ' Logarithm of the meter readings
        Next i

        ReDim X(1 To (B / Step), 1 To 2) As Double                                  ' Second column has values of Beta, First column has F(Beta), where F() is given by Beta MLE

        For j = 1 To (B / Step)
             X(j, 2) = j * Step
             X(j, 1) = (X(j, 2) * (((N / ((t ^ X(j, 2)) - (s ^ X(j, 2)))) * ((t ^ X(j, 2) * (WorksheetFunction.Ln(t))) - (s ^ X(j, 2) * (WorksheetFunction.Ln(s))))) - (WorksheetFunction.Sum(Range("AC1:AC" & N))))) - N

        Next j

Range("A1").Resize(Ubound(X,1),Ubound(X,2)).Value = X

End Sub
功能

WorksheetFunction.Sum(Range("AC1:AC" & N))

将返回活动工作表中指定范围的总和。尝试设置活动工作表(或在表达式中指定它)以确保引用正确的工作表。

我缺乏VB线索,但我非常确定:=“=ln(AB“&I&”)没有按照您希望的方式进行解析。
Step
是VBA关键字,但您也将其用作变量名。这样做是自找麻烦。