• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB functionについて)

VB functionについて

このQ&Aのポイント
  • VB functionとは何ですか?VB2010で動作させると型'double'の値を'system.Collections.ArrayList'に変換できない問題について教えてください。
  • Button1_Click関数とAAA関数の役割について教えてください。
  • Button1_Click関数で配列aArrに値を代入する際、なぜエラーが発生するのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

配列を渡したいのか ArryListとして渡したいのかどちらでしょう 現状の呼び出し元は 配列ですよね ならば受け側も配列を受け入れる型にしないといけません 使えるのは Array や Double() などです Integer()や Long()などもココで計算させたいなら Arrayを選択したほうがいいでしょう Double()だけというなら Double()で受けたほうがいいと思います Public Function AAA( byVal aArr as Double() ) as Double() または Public Function AAA( byVal aArr as Array ) as Double() Arrayにするなら 呼び出し元が算術できる型なのかをチェックしたほうがいいでしょう String() でも Object()でも渡せてしまいますから   Dim ObjType as System.Type = aArr.GetType()   With objType.Name   if .StartsWith("Double") = false And _     .StartsWith("Single") = false And _     .StartsWith("Int32") = false And _     .StartsWith("Int64") = false Then       return Nothing       ' または 例外をスローするとか   End if   End With   Dim retVal As Double() = Nothing   ReDim retVal(2)   Dim loopCnt As Integer = 0   Dim Arrcnt As Integer = aArr.Length   Dim sum As Double = 0.0   For loopCnt = 0 To Arrcnt - 1     sum += aArr(loopCnt)   Next   sum = sum / Arrcnt 'loopCnt   retVal(0) = sum   Return retVal End Function あと 呼び出し元で MsgBox( AAA(aArr) ) としていますが Double()で返ってくるので MsgBox(AAA(aArr)(0))といった具合に 要素を指定しましょう ArrayListでやるのであれば呼び出し元を dim aArr as new ArrayList aArr.Add(1.1) aArr.Add(2.3) MsgBox( AAA( aAr )(0) ) としてやって Public Function AAA(ByVal aArr As ArrayList) As Double()   Dim retVal As Double() = Nothing   ReDim retVal(2)   Dim loopCnt As Integer = 0   Dim Arrcnt As Integer = aArr.Count   Dim sum As Double = 0.0   For loopCnt = 0 To Arrcnt - 1     sum += aArr(loopCnt)   Next   sum = sum / Arrcnt 'loopCnt   retVal(0) = sum   Return retVal End Function といった具合になると思います

関連するQ&A

専門家に質問してみよう