作者o1o3o1o31030 (主席)
看板Office
標題[算表] VBA 在自訂函數中呼叫另一個自訂函數
時間Sat Jun 10 01:33:44 2017
軟體:Excel
版本:2013
各位版大好~
我想從一個自訂函數中呼叫另一個自訂的陣列函數
小弟我寫了一個陣列自訂函數 logit=(Mat,b)
其中 Mat是M*N矩陣
b是N+1列的行向量
logit本身會輸出M列的行向量
logit函數在儲存格中可以正常使用,如圖
http://imgur.com/a/8wfgz
Public Function logit(Mat, b)
Dim X(), A(), c()
MatC = Mat.Columns.Count
MatR = Mat.Rows.Count
bRow = b.Rows.Count
If MatC + 1 <> bRow Then
logit = "dismatch"
Exit Function
End If
ReDim X(1 To MatR, 1 To MatC + 1), A(1 To MatR, 1 To 1), c(1 To MatR, 1
To 1)
For i = 1 To MatR
X(i, 1) = 1
Next
For i = 1 To MatR
For j = 1 To MatC
X(i, j + 1) = Mat(i, j)
Next
Next
A = WorksheetFunction.MMult(X, b)
For i = 1 To MatR
c(i, 1) = 1 / (1 + Exp(-A(i, 1)))
Next
logit = c
End Function
如今我從另一個自訂函數呼叫這個函數logit該如何是好?
以下是我寫的:
Public Function 呼叫函數測試()
Dim Mat(1 To 2, 1 To 2), b(1 To 3, 1 To 1)
Dim P As Variant
Mat(1, 1) = 1
Mat(1, 2) = 2
Mat(2, 1) = 2
Mat(2, 2) = -2
b(1, 1) = 2
b(2, 1) = 5
b(3, 1) = 3
P = logit(Mat, b)
呼叫函數測試 = P
End Function
但實際在excel插入"呼叫函數測試"這函數時,儲存格出現#value!
不知道該如何呼叫一個自訂的陣列函數?
感謝各位!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.74.246
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Office/M.1497029626.A.434.html
※ 編輯: o1o3o1o31030 (114.136.74.246), 06/10/2017 01:34:19
※ 編輯: o1o3o1o31030 (114.136.74.246), 06/10/2017 01:34:46
1F:→ soyoso: 提供function logit的部分應會比較清楚 06/10 01:53
※ 編輯: o1o3o1o31030 (114.136.74.246), 06/10/2017 11:44:15
2F:→ o1o3o1o31030: logit函數如原文,麻煩S大了! 06/10 11:45
3F:→ soyoso: 因function logit的mat和b代入非範圍,以rows.count或 06/10 11:56
4F:→ soyoso: columns.count會有錯誤,可改以ubound 06/10 11:56
5F:→ o1o3o1o31030: 但是直接在儲存格使用logit函數是OK的 06/10 12:16
6F:→ soyoso: logit代入是範圍,function 呼叫函數測試代入的不是 06/10 12:21
8F:→ o1o3o1o31030: 換了之後反而logit不能用了!? 有點困惑@@ 06/10 12:29
9F:→ soyoso: 型態不同,range可用rows.count但無法用ubound,反之array 06/10 12:34
10F:→ soyoso: 可用ubound但無法用rows.count 06/10 12:34
11F:→ o1o3o1o31030: 所以我logit帶入的型態是range 06/10 12:35
12F:→ o1o3o1o31030: 的意思嗎? 06/10 12:36
13F:→ soyoso: 也不是,原po於logit上就無宣告型態,所以會以帶入的的資 06/10 12:38
14F:→ soyoso: 料為該型態,也就是帶入是range就為range,帶入array就為 06/10 12:39
15F:→ soyoso: variant 06/10 12:39
※ 編輯: o1o3o1o31030 (114.136.74.246), 06/10/2017 12:40:09
16F:→ soyoso: 帶入range的話,就可用range.rows.count或range.columns. 06/10 12:41
17F:→ soyoso: count來計算列數,而帶入array時就以ubound 06/10 12:41
18F:→ o1o3o1o31030: 恩恩,我了解型態range和arr的差別了! 好容易混淆 06/10 12:41
19F:→ o1o3o1o31030: 感謝S大每次精闢解說! 06/10 12:42