2012-06-08 92 views
0

全部, 我没有遇到过像以前那样令人沮丧的事情。感谢您对这个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 
+0

我缺乏VB线索,但我很确定这是:=“= ln(AB”&i&“)”没有被解析ss你希望。 – starbolin

+2

'Step'是一个VBA关键字,但您也将其用作变量名称。这样做是在寻求麻烦。 –

回答

0

功能

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

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