動的配列を返すプロシージャ(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
 
   
  |  
  |