2007-11-07

分散

  1. 前回の解答
    Sub 練習()
    Dim x() As Single, wa As Single, i As Integer, n As Integer
    i = 1
    Do While Selection.Cells(i, 1) <> "" And IsNumeric(Selection.Cells(i, 1))
      i = i + 1
    Loop
    n = i - 1
    Selection.Cells(n + 1, 1) = "個数"
    Selection.Cells(n + 1, 2) = n

    ReDim x(n)
    For i = 1 To n
      x(i) = Selection.Cells(i, 1)
    Next i
    wa = 0
    For i = 1 To n
      wa = wa + x(i)
    Next i
    Selection.Cells(n + 2, 1) = "合計"
    Selection.Cells(n + 2, 2) = wa

    heikin = wa / n
    Selection.Cells(n + 3, 1) = "平均"
    Selection.Cells(n + 3, 2) = heikin

    End Sub
  2. 先週に引き続き今度はB組の身長の平均も計算してみましょう。
    160
    162
    164
    166
    168
    170
    172
    174
    176
    178
    180
    先ほどのクラスと平均は同じく170ですが、このクラスの方が散らばりが大きいですね。 この散らばり具合を数字で表して見ましょう。

    課題2

    先ほど作った平均を求めるプログラムの後に、散らばり具合を計算するプログラムを書き足しましょう。
    ・まずそれぞれのデータから、既に求めた平均を引いてそれぞれのデータの右に表示しましょう。
    160-10
    162-8
    164-6
    166-4
    168-2
    1700
    1722
    1744
    1766
    1788
    18010
    ・これをそのまま足したのではプラスとマイナスが打ち消しあって0になってしまうので、2乗してから足しましょう。
    ・合計したものをデータの個数で割ります。

    A組なら10、B組なら40になった筈です。
    これを分散と言います。

  3. B組のばらつきはA組の2倍なのですが、分散は2乗してから足しているために4倍になっています。
    そこで分散の平方根を求めましょう。VBAでは平方根はsqr()関数を使います。
    分散の平方根のことを標準偏差と言います。

    平均だけでなく分散、標準偏差はデータ解析の基礎として重要です。必ず覚えてください。
    今回はBasicの練習のためにVBAを使って計算しましたが、Excelの関数でも計算できます。

    今回は前回の続きでしたので、早めに終わった人は別のトピックを勉強しましょう。

    一つ目は,プログラムの途中でウィンドゥを表示するInputBoxとMsgBoxです。
  4. これまでに作ったプログラムは、プログラムを実行するときにデータの先頭をクリックしておく必要がありました。
    その代わりに、Dim文の次に
    Range(InputBox("何処から足しますか?", "データ入力範囲")).Select
    という一行を加えてから実行すると、プログラムがデータの先頭が何処なのか尋ねるようになります。
    A1と入力するとA1セルから足します。
  5. 一つの行に色々書くと分かりにくくなりますので、一つずつ分けて書きましょう。
    dim msg as string,title as string, datarange
    msg="何処から足しますか?"
    title="データ入力範囲"
    datarange=inputbox(msg,title)
    Range(datarange).Select
    一つ一つの意味を考えてみてください
  6. 結果の表示も
    MsgBox(wa)
    のように書いてみましょう。タイトルをつけるには
    a = MsgBox(heikin, 0, "平均")
    のように書きます。

    二つ目は,自分で定義する関数Functionです。
  7. VBAのプログラムは、サブプロシージャだけでなく自分で関数を定義することもできます。 簡単な例として、与えられた二つの数を足す関数を作りましょう。End Subより下をクリックして今度は「function tashizan(x,y)」と入力してください。すると先ほど同様
     Function tashizan(x,y)
     
     End Function
    となります。今回も「Function tashizan(x,y)」と「End Function」の間にプログラムを書きます。今回はxとyの和を返すので
     tashizan=x+y
    と書きましょう。
  8. Functionの実行方法はSubと違います。Excelのシートに戻って、何処かのセルに
    =tashizan(1,2)
    と書いてみてください。3と表示されたら関数は正常に動作しています。
  9. Functionにおいて、与えられる変数や計算結果を返す変数の型を明示するには
    Function tashizan(x As Single, y As Single) as Single
    のように書きます。

    練習問題

    次の関数を作ってください ・エクセルのセルに=wa(n)と入力すると、1+2+3+・・・+nを計算した結果を返すもの
    つまり=wa(2)と書くと1+2、つまり3となり、=wa(3)と書くと1+2+3、つまり6になる関数。

    注意事項:Function の名前として"ex1"のような、「アルファベット 1 or 2 文字+数字」 の形式は、セルの名前と同じになるので使えません。

0 件のコメント: