作者MOONRAKER (㊣乌笨秃,又笨又秃)
看板Visual_Basic
标题Re: [VBA ] 请问如何呼叫矩阵
时间Tue Jun 17 23:26:47 2008
: → 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
--
BATCH 1 (4/20) - 如何隐身 - SPAM - 英国杀人笑话 -
http://tinyurl.com/65vvbx
BATCH 2 (5/10) - 当众脱裤 - 主教 - 傻蛋奥运会 -
http://tinyurl.com/68grk7
BATCH 3 (6/14) - 买张床 - 切达大侠 - 伐木人之歌 -
http://tinyurl.com/3zpyx5
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
■ 蒙帝派松正体中文计画 ■ Spam-a-lot and enjoy the pythonesque delight!
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.200.167