Re: [VBA ] 請問如何呼叫矩陣

看板Visual_Basic作者 (真理)時間16年前 (2008/06/19 00:45), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
我之前寫過的一個用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

06/19 00:57, , 1F
原來是這麼自然的啊!感謝!
06/19 00:57, 1F
文章代碼(AID): #18MJkXLf (Visual_Basic)
文章代碼(AID): #18MJkXLf (Visual_Basic)