ここから本文です

エクセルVBAのFunctionを使ったプログラミング

mot********さん

2010/12/1701:31:48

エクセルVBAのFunctionを使ったプログラミング

質問失礼します。
VBAで表の値を読み込んで合計をセル(17、2の倍数)に出力するというものなのですが下のようなプログラムを作ってみたところ親プロシージャのF_SumのなかのScoreの部分でByRef引数の型が一致しませんとでます。
いったいどうしてだめなのかわからないのでもしよろしければヒントだけでも良いので教えてください。
どうかお願いします。

Option Explicit

Dim TN(10) As Integer, Num_Class As Integer, Score(10, 20) As Single
Sub ファンクション()
Dim i As Integer

Num_Class = Range("F1")

For i = 1 To Num_Class
Read_Data i
Cal_Ave i
Cells(17, i * 2) = F_Sum(Score())
Next i
End Sub

Sub Read_Data(i As Integer)
TN(i) = 0
Cells(4, 2 * i).Activate

Do Until ActiveCell.Value = ""
TN(i) = TN(i) + 1

Score(i, TN(i)) = ActiveCell.Value 'Score(i, TN(i)) = Score(クラス,学生番号)
ActiveCell.Offset(1).Select
Loop
End Sub

Function F_Sum(i As Integer, Sc() As Single) As Single

Dim k As Integer

F_Sum = 0

For k = 1 To TN(i)
F_Sum = F_Sum + Sc(i, k)
Next k

End Function

閲覧数:
1,411
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

hd_********さん

2010/12/1701:40:18

F_Sumプロシージャの定義は、
F_Sum(i As Integer, Sc() As Single)
と、整数型の引数iと、単精度浮動小数点型の配列引数Scを受け取るようになっています。

一方呼び出し側では、
F_Sum(Score())
と、単精度浮動小数点型の配列のみを渡そうとしています。
渡そうとしているのが、整数型の値や変数、式であれば、

引数は省略できません。

というコンパイルエラーになるので、原因がわかりやすかったと思いますが、今回の場合、1つ目の引数のチェックで引っかかって、参照渡し(ByRef渡し)引数の型不一致コンパイルエラーが出ています。

解決策は、
第1引数に整数型の値や式、変数を渡して、Scoreは第2引数に指定する
です。

余談ですが、ByRef渡し(VBAの場合、引数のデフォルトの渡し方)の場合で、値や式ではなく、変数(配列の要素を含む)を渡すような場合、きちんと型を揃えなければいけません(Variant型の引数に、Variant型で扱える型の引数を渡すのは可能)。
今回のコンパイルエラーは、メッセージが適切ではないですが、それが示しているのは、そういった内容です。
ByVal渡し(値渡し)の引数では、そのような縛りはありません。

質問した人からのコメント

2010/12/17 02:22:00

ありがとうございます。本当に助かりました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる