電子書籍の厳選無料作品が豊富!

VBAの問題がわからないのでどなたか教えてください。

【問題】
表1には4名分の体重データがある。合計、平均、分散と標準偏差を求めるプログラムを作成しなさい。

.表1の体重データ

ID 体重
A 50
B 60
C 74
D 60

なお、表1のデータはSheet1に準備すること。
動作は以下のようなものを想定しています。

0.プログラム実行直後は画像のようなフォームが表示される。

1.計算ボタンを押すと合計、平均、分散と標準偏差が一度に表示される。


という問題なのですが、合計と平均の求め方はわかったのですが、分散と標準偏差の求め方がわかりません(>_<)

ちなみに合計と平均は下に書いたようにしてできました。
分散と標準偏差もDo while文を使って求めたいです、どなたかご教授お願いいたします。

Private Sub CommandButton1_Click()



Dim intPerson As Integer '人数
Dim dblSum As Double '合計
Dim dblAvg As Double '平均
Dim dblbun As Double '分散
Dim dblhyou As Double '標準偏差
Dim intRow As Integer
Dim intCol As Integer

'変数を初期化
dblSum = 0
dblAvg = 0
dblbun = 0
dblhyou = 0

'[データ]シート上の点数データの行番号の開始位置

intRow = 2

'[データ]シート上の点数データの列番号の判定

intCol = 2

Do While Worksheets("Sheet1").Cells(intRow, intCol) <> ""
dblSum = dblSum + Worksheets("Sheet1").Cells(intRow, intCol)
intPerson = intPerson + 1
intRow = intRow + 1

Loop


dblAvg = dblSum / intPerson


Label6.Caption = dblSum
Label7.Caption = dblAvg

End Sub

「VBAの問題がわからないのでどなたか教え」の質問画像

A 回答 (3件)

学生さんですか?


ご質問者さんには責任はないけれども、ずいぶん古い教本のようです。
全体的に、約20年以上前のスタイルです。

>分散と標準偏差もDo while文を使って求めたいです
学校でしたら、英語の短縮形を使うべきです。Variance( of Population) と Standard Deviation( of Population) ->一例: Vari, stDevi

それに、Prefix は、ほどほどにですね。
intRow とか、intCol というのも、データ型が Integer というのは、たぶん、95時代だと思います。
それに、Cells オブジェクトに.Value プロパティが抜けています。正規のコードでは省略しません。.Value は、暗黙のプロパティとは言いますが、Default のプロパティではありません。

'Label7.Caption = dblAvg の後につけてください。
''---
With Worksheets("Sheet1")
intRow = 2
intCol = 2
Do While .Cells(intRow, intCol).Value <> ""
 dblbun = dblbun + (.Cells(intRow, intCol).Value - dblAvg) ^ 2
 intRow = intRow + 1
Loop
End With
dblbun = dblbun / intPerson
dblhyou = dblbun ^ (1 / 2)

'Debug.Print Fix(dblbun * 100 + 0.5) / 100 '小数点第3位四捨五入
'Debug.Print Fix(dblhyou * 100 + 0.5) / 100 ' 〃

'ラベルがあるとすると
Label8.Caption = CStr(Fix(dblbun * 100 + 0.5) / 100 )
Label9.Caption = CStr(Fix(dblhyou * 100 + 0.5) / 100)
'dblbun, dblhyou のまま入れてもエラーは起きないけれど、少し乱暴です。
    • good
    • 0

Label6.Caption = dblSum


Label7.Caption = dblAvg
のあとに以下の行を追加してください。
標準偏差と分散の求め方は下記URLを参考にしています。
https://sci-pursuit.com/math/statistics/standard …

------------------------------------------------------
Dim dblbun2 As Double '分散の2乗の和
Dim dblsa As Double '平均との差
dblbun2 = 0
For intRow = 2 To 1 + intPerson
dblsa = Abs(Worksheets("Sheet1").Cells(intRow, "B").Value - dblAvg)
dblbun2 = dblbun2 + dblsa * dblsa
Next
dblbun = dblbun2 / intPerson
dblhyou = Sqr(dblbun)
    • good
    • 0

もっとシンプルに対象セル範囲を任意の変数に代入して、それをsum/average/varp/stdevpと言った各関数で使えば良いと思います。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!