Re: [VBA ] 請問如何呼叫矩陣
: → 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
討論串 (同標題文章)