配列変数X(99)にそれぞれ100人の100点満点のテストの結果が入っています。
この平均点数を求めたいのです。ただし0点の人は対象外としたいです。
Sub Test()
For Cnt = 0 To 99
If X(Cnt) <> 0 Then Seito_Cnt = Seito_Cnt + 1
PTotal = PTotal + X(Cnt)
Next Cnt
MsgBox "平均点は、" & PTotal / Seito_Cnt
End Sub
で平均点は、求められるのですが、Application.WorksheetFunction.Averageを
使って一発で求める方法を探しています。
For Cnt = 0 To 99 の中で0点でない場合のみ新しい配列変数に代入していけば
平均点を一発で求めるための配列変数ができるのですが、この場合その配列変数
をReDimで宣言する必要がありますが、0点以外の生徒が何人いるかわかりません。
For Cnt の中で
一旦 If X(Cnt) <> 0 Then Seito_Cnt = Seito_Cnt + 1でその数を求めてから
ReDimして、再度For Cnt = 0 To 99で新しい配列変数に代入していき、終わっ
ったあと、Application.WorksheetFunction.Averageとする以外に方法はないの
でしょうか?
もっとスマートな方法はないものかと質問させていただきました。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
データを入れる配列をVariant型にして、配列に入れる時に0点だったら空文字列""にしておきます。
その配列をAverage関数に渡せば、そこはノーカンの平均が求められます。以下の超安直な例がわかりやすいかと。Sub test()
Dim aa(10) As Variant
aa(0) = 5
aa(1) = 5
aa(2) = 5
aa(3) = 5
aa(4) = 5
aa(5) = 5
aa(6) = 5
aa(7) = 5
aa(8) = 5
aa(9) = ""
MsgBox WorksheetFunction.Average(aa)
End Sub
配列宣言をVariant型にすること。ゼロの場合""を代入すること。了解しました。
まったく思いつきませんでした。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- その他(プログラミング・Web制作) atcoder python コードへの助言 2 2022/08/12 15:31
- Visual Basic(VBA) エクセルVBAコピー 2 2022/06/08 21:45
- Excel(エクセル) マクロ(データ取得と転記)について教えてください 3 2022/12/24 12:18
- Visual Basic(VBA) vbaで色付けされたセルを除外したいのですが 5 2023/01/28 17:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
ListViewで、非表示列って作れ...
-
VBA 1次元配列を2次元に追加する
-
VBのFunctionで、配列を引数...
-
for each の現在の配列ポインタ...
-
2次元動的配列の第一引数のみを...
-
VLOOKUP関数で、一番下...
-
特定のセル範囲で4文字以上入力...
-
VB2008: CSV を二次元配列に読...
-
配列変数の添字が範囲外ですと...
-
VBAで多次元配列のインデックス...
-
COBOL 2次元配列について
-
ExcelVBA functionについて
-
配列内の内容を全て表示する方法
-
VBA Match関数の限界
-
VBAで近似曲線の係数取得
-
コントロール配列のループ
-
AES暗号にて、AES_set_encrypt_...
-
OutlookVBAでサブフォルダ一括作成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
VBA 1次元配列を2次元に追加する
-
2つ以上の変数を比較して最大数...
-
特定のセル範囲で4文字以上入力...
-
VBのFunctionで、配列を引数...
-
Excel-VBAの配列「Public Const...
-
for each の現在の配列ポインタ...
-
subの配列引数をoptionalで使う...
-
VB6 配列を初期化したい
-
Dim は何の略ですか?
-
ListViewで、非表示列って作れ...
-
配列変数の添字が範囲外ですと...
-
VBAで近似曲線の係数取得
-
2次元動的配列の第一引数のみを...
-
[Excel2000_VBA] 型が一致しま...
-
ArrayListの初期値に二次元配列...
-
OutlookVBAでサブフォルダ一括作成
-
VLOOKUP関数で、一番下...
-
AES暗号にて、AES_set_encrypt_...
-
ヤマ括弧でくくられたテキスト...
おすすめ情報