|
関数(引数・戻り値とも配列)を
Excelワークシートから配列を渡し、ユーザー関数として呼び出したい。
ご協力下さい。
・VBAコードからは、問題なく利用可能な関数Pu
・Excelワークシートから呼び出し不可。#VALUE!表示
・以下関数で挟み、VBAからは利用可能
・Pre_関数(引数:文字列 戻り値:配列)
・Post関数(引数:配列 戻り値:文字列)
◎・xPack関数(引数:文字列 戻り値:文字列):パッケージ シートからも利用可能
種々関数を連結したく、高速化からも、直接呼出す方法はないでしょうか?
宜しくお願い致します。
準備 A1=12, B1=45
結果
・C1=Pre(A1,B1) '{12,45}スピル表示
・C2=Pu(Pre(B1,C1) '#VALUE!
・C3=Pu(C1#) '#VALUE!
・C4=Pu({12,45}) '#VALUE!
・C5=Pu(Pre("12","45")) '#VALUE!
・C11=Post(Pre(A1,B1)) '#VALUE!
・C12=Post(Pu(Pre(B1,C1)))'#VALUE!
・C13=Post(Pu(C1#)) '#VALUE!
・C14=Post(Pu({12,45})) '#VALUE!
・C15=Post(Pu(Pre("12","45"))) '#VALUE!
・C21=xPack(A1,B1) '-1881 正 パッケージ関数
不具合を再現する単純コード 演算内容は問わず
--
Public Function Pu(p() As Long) As Long() '配列受取・配列戻り
Dim ret() As Long: ReDim ret(UBound(p))
ret(0) = p(0) + p(1) '和
ret(1) = p(0) - p(1) '差
Pu = ret
End Function
Public Function Pre(S1 As String, S2 As String) As Long()'演算 配列戻り
Dim ret() As Long: ReDim ret(1)
ret(0) = CInt(S1)
ret(1) = CInt(S2)
Pre = ret
End Function
Public Function Post(p() As Long) As String '加工、戻り値文字列
Post = p(0) * p(1) '積
End Function
Public Function xPack(S1 As String, S2 As String) As String '引数,戻り値文字列
xPack = Post(Pu(Pre(S1, S2)))
End Function
---
|
|