Re: [VBA ] 請問如何呼叫矩陣
我之前寫過的一個用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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):