プログラム初心者です。
以下のソースをVB2010で動作させると型'double'の値を'system.Collections.ArrayList'に変換できません。となります。呼び出し方法がおかしいと思うのですが。よく分かりません。解決方法を教えてくださいお願い致します。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim aArr() As Double
aArr(1) = 1.1
aArr(2) = 2.3
MsgBox(AAA(aArr))
End Sub
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 / loopCnt
retVal(0) = sum
Return retVal
End Function
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- 数学 単振り子とルンゲ・タック法 1 2022/07/15 00:05
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
応用情報技術者試験の令和元年...
-
VBで作った乱数を一度も重複さ...
-
VBAで配列の計算
-
IF関数でEmpty値を設定する方法。
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
パソコンキーボードで時分秒を...
-
動的配列が存在(要素が有る)か...
-
EXCEL VBA で、0から?1から?
-
VB.net 引数で配列変数を渡す際...
-
【MFC】GetCount()とGetSize()...
-
マージソートについて
-
MicroSoft BasicのDim文とVisua...
-
Excel VBA 多段階配列の宣言の仕方
-
C言語のread関数に関するファイ...
-
動的配列と固定長配列の違いに...
-
変数を動的に作るには?
-
ジャグ配列とは
-
配列プロパティをREDIMする方法...
-
For文と配列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
変数を動的に作るには?
-
VB.net 引数で配列変数を渡す際...
-
動的配列が存在(要素が有る)か...
-
VBで作った乱数を一度も重複さ...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
javaプログラムについて
-
C#の質問
-
Visual C++ でコントロールを...
-
遅延バインディングを使用でき...
-
Excel VBAで配列の途中から(X)M...
-
排列と配列の漢字の使い分けは
-
For文と配列
-
VBでbyte配列型のインスタンス...
-
C言語で3次元配列の課題をして...
おすすめ情報