【发布时间】:2018-07-19 18:57:24
【问题描述】:
下面是示例代码,它是从更大的整体中摘录的。我正在尝试计算向量beta 和Xtempj 的点积,这应该是一个标量,然后将得到的标量乘以另一个标量Ycoded(j,1)。
但是,我在temp1(j,1) 的赋值语句中收到错误消息“类型不匹配”。
选项显式
Sub XX()
Dim beta As Variant
Dim temp1 As Variant
Dim X5 As Variant
Dim Xtempj As Variant
Dim Ycoded As Variant
ReDim beta(1 To 2, 1 To 1)
ReDim X5(1 To 2, 1 To 2)
ReDim temp1(1 To 2, 1 To 1)
ReDim Xtempj(1 To 2, 1 To 1)
ReDim Ycoded(1 To 2, 1 To 1)
beta(1, 1) = 0.510825624
beta(2, 1) = 0
X5(1, 1) = 1
X5(1, 2) = 45
X5(2, 1) = 1
X5(2, 2) = 76
Ycoded(1, 1) = 1
Ycoded(2, 1) = 0
For j = 1 To 2
For k = 1 To 2
Xtempj(k, 1) = X5(j, k)
Next k
temp1(j, 1) = WorksheetFunction.MMult(Application.Transpose(beta), Xtempj) * Ycoded(j, 1)
Next j
End Sub
此错误消息让我认为 VBA 将 Ycoded(j,1) 视为 1 x 1 数组。因此,我也尝试了以下说法:
temp1(j, 1) = WorksheetFunction.MMult(WorksheetFunction.MMult(Application.Transpose(beta), Xtempj), Ycoded(j, 1))
但是,在这里我收到“无法获取 WorksheetFunction 类的 MMult 属性”。
我可以在睡梦中在 R 或 SAS Proc IML 中做这种事情,所以这非常令人沮丧。感谢您提供任何帮助/见解。
最好的,
丹
【问题讨论】:
-
请声明所有变量以及 X5k 是什么?将 Option Explicit 放在模块顶部(始终、无处不在)
-
X5k 可能会被初始化为 variant/empty,这意味着您的 For k = 1 To X5k 不会发生,并且 Xtempj 不会是您所期望的。
-
我很抱歉:该声明应改为(例如目的):For k = 1 To 2
标签: excel vba matrix vector linear-algebra