作者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/cn.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