全部, 我没有遇到过像以前那样令人沮丧的事情。感谢您对这个EXTREMELY NAIVE问题的帮助。这个问题看起来很简单,但是我太过分了,我的眼睛无法捕捉到这个愚蠢的错误。循环内计算错误
(示例代码粘贴在下方 - 我使用了简化版本)。 我只是有一个两列数组X,我用一个简单的循环填充这个数组中的值。所有参数s,t,N都是常数,我从表单中的其他单元格中检索它们,因此您可以忽略它们。
问题 在第二回路,其中我填写阵列X的元素我填在第二列具有线性增加的值(0.01,0.02,0.03,...,30),和第一列应该是第二列中这些值的函数以及常数N,s,t。听起来很简单!
问题是由于某种原因,第一列中的值出错!我在Excel和Matlab中验证了它。例如,我将常量N,s,t和我的值插入0.01,并计算Excel和Matlab中的第一列值,它们都给出了相同的正确结果(-0.1113)。当我运行VBA代码时,它给出了一个不同的值(0.36 - 我500%确定-0.1113是正确的答案)。 更ODD,我在接着Ĵ语句插入BREAK POINT,并且对于j = 1,I核实所有的常数的所有值,所有正确的,但是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
我缺乏VB线索,但我很确定这是:=“= ln(AB”&i&“)”没有被解析ss你希望。 – starbolin
'Step'是一个VBA关键字,但您也将其用作变量名称。这样做是在寻求麻烦。 –