全部, 我没有遇到像以前那样令人沮丧的事情。关于这个非常棒的问题你的帮助将不胜感激。似乎这个问题很简单,但是我太过分了,我的眼睛无法捕捉到这个愚蠢的错误。
(示例代码粘贴在下面 - 我使用的是简化版本)。 我只是有一个双列数组X,我使用一个简单的循环填充这个数组中的值。所有参数s,t,N都是常量,我从工作表中的其他单元格中检索它们,因此您可以忽略它们。
问题 在 second 循环中,我填充了数组X的元素。我用第二列填充线性增加值(0.01,0.02,0.03,....,30),第一列应该是第二列中这些值的一些函数和常数N,s,t。听起来很简单!
问题第一栏中的值出于某种原因出错!我在Excel和Matlab中验证了它。例如,我获取了插入0.01的常量N,s,t和I的值,并在Excel和Matlab中计算了第一列值,它们都给出了相同的正确结果(-0.1113)。当我运行VBA代码时,它给出了一个不同的值(0.36 - 我500%确定-0.1113是正确的答案)。 更多奇怪,我在 下一个j 语句中插入 BREAK POINT ,对于j = 1,我验证了所有常量的所有值,都是正确的,但X(j,1)仍为0.36。 让我发疯的原因,就是当我粘贴我在X(j,1)代码中使用的相同公式时,将其粘贴到立即窗口中,它给出了正确的值(-0.113).. 非常相似的公式..零改变!!!!
有什么直觉可以解决这个问题吗?我检查了我的代码100万次,以确保参数名称中没有重复项,或者某些参数没有重置。没事!
* ANY * 输入将受到高度赞赏。非常感谢你,我很抱歉这是一个如此愚蠢的问题。
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 :(得分:0)
功能
WorksheetFunction.Sum(Range("AC1:AC" & N))
将返回活动工作表中指定范围的总和。尝试设置活动工作表(或在表达式中指定它)以确保引用正确的工作表。