動的配列を返すプロシージャ(VB6.0)_1 (No.1の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 11:34
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[基本コード][][] * * キーワード:関数,プロシージャ,戻り値,,, * ***********************************************************************************
-------------------------------------------------------------------------- Re: 動的配列を返すプロシージャについて - takk 2003/01/25-14:39 No.2425 --------------------------------------------------------------------------
手元にVB5.0がないんですが……。 下記のソースで試してみてください。 秋風さんのソースではエラーが多く、また汎用性に欠けるので手直ししました。 ちなみに戻り値をString()にするとエラー出る、とのことですがVB6.0では問題なく動いています。 もしダメそうならnanashiさんの意見通り、戻り値をVariant型で指定してみてください。
'使う時はこんな感じで strTimeList() = split(TimeList, ",")
'ファンクション Private Function Split(ByVal Data As String, Optional ByRef Demiliter As String = " ") As String() Dim lCnt&, lPos&, lLen As Long Dim sBuff() As String '文字列が指定されていない時は要素なしの配列を返す If Len(Data) = 0 Then Split = Array() Exit Function End If 'デミリタの長さを取得 lLen = Len(Demiliter) Do '次のデミリタの位置を取得 lPos = InStr(Data, Demiliter) '配列に追加 If lPos > 0 Then ReDim Preserve sBuff(lCnt) sBuff(lCnt) = Left$(Data, lPos - 1) Data = Mid$(Data, lPos + lLen) lCnt = lCnt + 1 Else ReDim Preserve sBuff(lCnt) sBuff(lCnt) = Data Data = vbNullString End If Loop While Len(Data) > 0 '結果を返す Split = sBuff End Function
|
動的配列を返すプロシージャ(VB6.0)_2 (No.2の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 11:34
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[基本コード][][] * * キーワード:関数,プロシージャ,戻り値,,, * ***********************************************************************************
----------------------------------------------------------------------------------- Re^2: 動的配列を返すプロシージャについて - 魔界の仮面弁士 2003/01/25-16:20 No.2426 -----------------------------------------------------------------------------------
> ちなみに戻り値をString()にするとエラー出る、とのことですがVB6.0では問題なく動いています。 配列を戻り値として返せるようになったのは、VB6からなのです。(^^; http://www.asia.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/vbcon98/vbmscwhatsnewinlanguagefeaturesvb98.htm
> もしダメそうならnanashiさんの意見通り、戻り値をVariant型で指定してみてください。 そうですね。VB5では、戻り値をVariantにして対処する方法が、一般的だと思います。 Variant型には、配列を格納する事ができますので、今回のような「String配列」を 返すような目的には充分でしょう。
ただし、この方法で返せる配列は、「Variantに格納できるデータ型の配列」に限られます。
StringやLongなどの配列であれば問題はないのですが、VB5のユーザー定義型の場合は、 Variantに格納することができませんので、VB6でいうところの
Option Explicit Public Type TEST aa As Long End Type Public Function Proc() As TEST() Dim a(1) As TEST a(0).aa = 123 a(1).aa = 456 Proc = a End Function Private Sub Main() Dim T() As TEST T = Proc() Debug.Print T(0).aa + T(1).aa End Sub
というコードを、 Public Function Proc() As Variant Dim a(1) As TEST a(0).aa = 123 a(1).aa = 456 Proc = a End Function のようにして対処する事は、残念ながらできません。
このような場合は、戻り値のかわりに引数を使って 渡すようにする事で、一応は対処する事ができます。
Public Sub Proc(ByRef a() As TEST) ReDim a(1) a(0).aa = 123 a(1).aa = 456 End Sub Private Sub Main() Dim T() As TEST Call Proc(T) Debug.Print T(0).aa + T(1).aa End Sub
|
|