我有以下的1x1数组:
Dim wbottom As Variant
wbottom = WorksheetFunction.MMult(WorksheetFunction.transpose(e), wtop)
我正在尝试获取数组中的数字。 wbottom(0,0)和wbottom(1,1)给出“下标超出范围”。当我尝试用MsgBox打印出数字时,ReDim-ming什么都没有。我该如何解决这个问题?
答案 0 :(得分:1)
如果得到的矩阵是1x1,则得到的数组是1维的,唯一有效的下标是1.见下文,其中A1:E1
和A3:A7
分别包含1x5和5x1矩阵的值(这样乘法得到1x1矩阵):
Sub mmultTest()
Dim v As Variant
v = WorksheetFunction.MMult(Range("A1:E1"), Range("A3:A7"))
Debug.Print LBound(v)
Debug.Print UBound(v)
Debug.Print v(1)
End Sub
输出如下:
1
1
55
答案 1 :(得分:0)
你可以尝试
wbottom = WorksheetFunction.SumProduct(e, wtop)
将列转换为行,然后将其乘以一列以获得1x1矩阵,可得到1x1矩阵,其唯一元素是两列的点积。函数SumProduct
已经是点积,并且不需要转置然后解包值。
为了测试这一点,我设置了一个工作表,看起来像
A B
------
1 4
2 5
3 6
然后运行以下代码:
Sub test()
Dim A As Range, B As Range, product As Variant
Set A = Range("A1:A3")
Set B = Range("B1:B3")
With Application.WorksheetFunction
product = .MMult(.Transpose(A), B) 'what you have
Debug.Print TypeName(product)
Debug.Print product(1)
product = .SumProduct(A, B)
Debug.Print TypeName(product)
Debug.Print product
End With
End Sub
结果输出:
Variant()
32
Double
32