作者truths (真理)
看板Visual_Basic
标题Re: [VBA ] 请问如何呼叫矩阵
时间Thu Jun 19 00:45:20 2008
我之前写过的一个用vba做矩阵运算的小范例 参考看看
Sub try()
Dim aa(1 To 10, 1 To 10) As Double
Dim bb(1 To 10, 1 To 10) As Double
Dim i As Integer, j As Integer
Dim arr As Variant
For i = 1 To 10
For j = 1 To 10
aa(i, j) = i
bb(i, j) = j
Next j
Next i
arr = Application.mmult(aa, bb)
MsgBox arr(5, 10)
End Sub
※ 引述《MOONRAKER (㊣乌笨秃,又笨又秃)》之铭言:
: : → MOONRAKER:你自己写成一个函数就够好了,就我看excel的mmult()实在
: : → MOONRAKER:是微软最厉害的整人发明,用VBA呼叫也不会方便
: : → MOONRAKER:如果你需要反矩阵之类困难的功能 再研究怎麽呼叫吧
: 说是这麽说,我还是把它干出来了,也不知道是基於赌烂还是研究精神 -_-
: 在VBA中呼叫excel工作表函数的标准方法是使用application.worksheetfunction物件
: 格式是application.worksheetfunction.<函数名字>(<参数>...)
: 但是mmult()函数有一个特性,它不是传回一个纯量,是矩阵
: 在excel中的用法也特别难搞(本部份略,各位可以自己试一试,便知其整人)
: excel documentation在这一部份也说明有限
: 没有解释矩阵函数这种传回非纯量的函数在VBA中怎麽搞
: 不过有一个简单的办法,用正确的方法操作,再把矩阵录下来研究就行
: 研究的过程也省略,总之我发现可以这样写
: range(<结果矩阵>).select
: selection.formulaarray="mmult(<矩阵1>,<矩阵2>)"
: 这里所有的矩阵都必须存在worksheet上
: 写法用"F6:G7"这种格位名称就可以了,如mmult(a1:c3, e4:g6)
: 当然在VBA里面要变出这种格位名称有点麻烦
: 其实我不知道有什麽标准的方法,不过至少这样确实可以得出结果矩阵
: 至於结果矩阵要放在哪里,要规划多长多宽,就要自己在程式里处理
: 前面也说了,这其实没有多方便,自己写一个函数也很简单
: 但是在使用excel的其他矩阵函数时就有用了,例如反矩阵
: 这就非常实用,因为自己写反矩阵的程式相当麻烦
: range(<结果矩阵>).select
: selection.formulaarray="minverse(<矩阵1>)"
: 要把算出来的内容存到VBA阵列,就自己用cells去worksheet上harvest就好
: 听说还可以用index()工作表函数,不过我懒了 :P
:
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.6.184
1F:推 MOONRAKER:原来是这麽自然的啊!感谢! 06/19 00:57