[英]How to Automatically update cells in Excel that uses a particular VBA Code?
[英]How to update an old vba code to work on excel?
我有這本舊書中的代碼,該書在Excel
不起作用。 它應該根據一系列數字x和y計算Deming回歸的斜率和截距
Function Deming(XValues, YValues)
Dim MeanX(), MeanY()
Ncells = XValues.Count
ReDim MeanX(Ncells / 2), MeanY(Ncells / 2)
For x = 2 To Ncells Step 2
MeanX(x / 2) = (XValues(x - 1) + XValues(x)) / 2
MeanY(x / 2) = (YValues(x - 1) + YValues(x)) / 2
SumX = SumX + MeanX(x / 2): SumY = SumY + MeanY(x / 2)
SumX2 = SumX2 + (MeanX(x / 2)) ^ 2
SumY2 = SumY2 + (MeanY(x / 2)) ^ 2
SumXY = SumXY + MeanX(x / 2) * MeanY(x / 2)
SumDeltaX2 = SumDeltaX2 + (XValues(x - 1) - XValues(x)) ^ 2
SumDeltaY2 = SumDeltaY2 + (YValues(x - 1) - YValues(x)) ^ 2
Next
XBar = SumX / N: YBar = SumY / N
Sx2 = (N * SumX2 - SumX ^ 2) / (N * (N - 1))
Sy2 = (N * SumY2 - SumY ^ 2) / (N * (N - 1))
Sdx2 = SumDeltaX2 / (2 * N)
Sdy2 = SumDeltaY2 / (2 * N)
rPearson = (N * SumXY - SumX * SumY) / Sqr((N * SumX2 - SumX ^ 2) * (N *
SumY2 - SumY ^ 2))
lambda = Sdx2 / Sdy2
U = (Sy2 - Sx2 / lambda) / (2 * rPearson * Sqr(Sx2) * Sqr(Sy2))
Slope = U + Sqr(U ^ 2 + 1 / lambda)
Intercept = YBar - Slope * XBar
Deming = Array(Slope, Intercept)
End Function
這是否語法錯誤?
首先,這不是舊代碼 ,這簡直是不好的代碼 。
當有人在模塊/工作表的頂部寫Option Explicit
時,VBA中任何無法編譯的內容都是錯誤的語法。 這是一個經驗法則。 對於代碼,如果將此代碼粘貼到編輯器,則以下行為紅色:
rPearson = (N * SumXY - SumX * SumY) / Sqr((N * SumX2 - SumX ^ 2) * (N *
SumY2 - SumY ^ 2))
這是因為它應該在1行中,而不是2行中。
因此,關於這個問題-如何更新它-第一步,請確保代碼在頂部帶有Option Explicit
編譯( Option Explicit語句 )。 因此,編寫Option Explicit
,然后轉到VBEditor的功能區上的Debug> Compile。 VBeditor將突出顯示該問題。 第一個是未定義Ncell
:
然后找到一種定義它的方法,例如將Dim Ncells as Variant
寫Dim Ncells as Variant
或其他您認為在高亮行頂部有用的內容。 僅僅聲明一個變量可能是不夠的,因為代碼中存在XBar = SumX / N
的計算。 在那里,應聲明N
並將其分配給一個值。 如果僅聲明,它將為0
,然后除以0將是錯誤。 因此,根據邏輯,可能應該這樣寫: Dim N as Double: N = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.