Sub weighted_regression()
Dim a As Range, n As Long, k As Long
Dim y, X, M, SeCo() As Double
Dim Coeff As Variant, Rsq As Single
Dim W() As Single
Set a = Range("A1").CurrentRegion.Resize(, 4)
n = a.Rows.Count: k = 2
ReDim W(1 To n, 1 To n)
ReDim SeCo(1 To k, 1 To 1)
a.Columns(k + 1) = 1
For i = 1 To n: W(i, i) = a(i, 4) ^ 0.5: Next i
With Application
y = .MMult(W, a.Resize(, 1))
X = .MMult(W, a.Resize(, 2).Offset(, 1))
M = .MInverse(.MMult(.Transpose(X), X))
Coeff = .MMult(M, .MMult(.Transpose(X), y))
RVar = (.SumSq(y) - Evaluate(.MMult(.Transpose(y), .MMult(X, Coeff)))) / (n - k)
Rsq = Evaluate(.MMult(.Transpose(y), .MMult(X, Coeff))) / (.SumSq(y))
For j = 1 To k
SeCo(j, 1) = (RVar * M(j, j)) ^ 0.5
Next j
End With
a.Columns(k + 1).ClearContents
'RESULTS FOLLOW
Cells(1, k + 5) = "Coeffs"
Cells(2, k + 5).Resize(k) = Coeff
Cells(1, k + 6) = "SECoef"
Cells(2, k + 6).Resize(k) = SeCo
Cells(1, k + 7) = "RSq"
Cells(2, k + 7) = Rsq
Cells(2, k + 4) = "b"
Cells(3, k + 4) = "m"
End Sub