VBA:将1x1矩阵转换为整数

时间:2016-01-20 16:09:00

标签: excel vba excel-vba

我有以下的1x1数组:

Dim wbottom As Variant
wbottom = WorksheetFunction.MMult(WorksheetFunction.transpose(e), wtop)

我正在尝试获取数组中的数字。 wbottom(0,0)和wbottom(1,1)给出“下标超出范围”。当我尝试用MsgBox打印出数字时,ReDim-ming什么都没有。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果得到的矩阵是1x1,则得到的数组是1维的,唯一有效的下标是1.见下文,其中A1:E1A3: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