2007-11-28

これまでのまとめ

相関係数の部分がまだ出来ていない人が多いですし、丁度半分終わったので、今日の講義は前回までの復習です。

分散と標準偏差の解答

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

For i = 1 To n
  Selection.Cells(i, 2) = x(i) - heikin
Next i

For i = 1 To n
  Selection.Cells(i, 3) = Selection.Cells(i, 2) ^ 2
Next i

wa2 = 0
For i = 1 To n
  wa2 = wa2 + Selection.Cells(i, 3)
Next i

bunsan = wa2 / n
Selection.Cells(n + 4, 1) = "分散"
Selection.Cells(n + 4, 2) = bunsan

hensa = Sqr(bunsan)
Selection.Cells(n + 5, 1) = "標準偏差"
Selection.Cells(n + 5, 2) = hensa

End Sub

既に出来た人のために、別のテーマを用意しました。
まず11月4日の後半に書いているInputBox, MsgBoxとFunctionを勉強してください。
それが終わった人は、入力先だけでなく、結果の出力先もExcelに表示されるボックスから指示できるようにするために、ユーザーフォームの使い方を勉強しましょう。詳しいことは「ExcelVBAによる統計データ解析入門」縄田和満著に書いてあります。
 ユーザーフォームは主に、以下のような流れで作ることができます。

    1、ユーザフォームの準備 (「挿入」→「ユーザーフォーム」)
    2、ラベルの作成 (「ツールボックス」中の[A]を ドラッグ アンド ドロップ)
    3、テキストボックスの作成 (「ツールボックス」中の[ab|]を ドラッグ アンド ドロップ)
    4、コマンドボタンの作成 (「ツールボックス」中の[コマンドボタン]を ドラッグ アンド ドロップ)
    5、タブオーダーの変更 (TextBox、CommandBox、Labelの順にする)
    6、コードの作成 (CommandButtonがクリックされたときのもの)
    7、Calculateプロージャの入力 (標準モジュールの[Module1]にコードを入力する)
    8、ユーザーフォームを起動するプロシージャーの作成 (標準モジュールの[Module1]にコードを入力する)

例題

まず,次のようなプログラムを考えます。
Sub total()
Range("A1").Select
x1 = Selection.Cells(1, 1)
x2 = Selection.Cells(2, 1)
x3 = Selection.Cells(3, 1)
Sum = x1 + x2 + x3
Range("B1") = Sum
End Sub
これはA1セルを選択して,そこから3つの数を足して,結果をB1セルに表示するプログラムです。 このA1とかB1の部分を,プログラムの実行時に指定できるようなプログラムを作ります。

このような画面を作り、ここにA1と入力して計算開始ボタンを押すとA1から下3つのセルを足し算して結果をB1に書き込むプログラムを作りましょう。まずこの画面を作りましょう。よく分からない人は上の概略を読んでください。

大事なのは、「計算開始」ボタン(オブジェクト名はCommandButton1)を押した時のプログラムの動作です。Microsoft Visual Basicの「表示(V)」をクリックしてその中の「コード(C)」を選んでください。UserForm1(コード)という画面が現れるので、まず左側から「計算開始」ボタンのオブジェクト名CommandButton1を選びます。次にそのボタンをクリックした時の動作を記述したいので右側からClickを選びます、というか最初からそれが選ばれていると思います。すると
Private Sub CommandButton1_Click()

End Sub
と書かれていますので、その2行目からプログラムを書いていきます。

A1を選択するにはRange("A1").Selectと書きますが,この"A1"の部分をプログラム実行時に指定できるようにしましょう。ここでは今作ったフォームの白い箱(オブジェクト名はTextBox1)に記入された 文字を使いますので、"A1"の代わりに
Range(UserForm1.TextBox1.Text).Select
と書きます。 また,B1セルに結果を表示するにはRange("B1") = Sum と書きます。 表示し終わったら「セルの足し算」画面を消しますので Range("B1") = Sum

End Sub の間に
Unload UserForm1
と書きます。これが無いと足し算の結果を 表示した後もプログラムが終わらなくなります。終わらなくなって困った時は「セルの足し算」画面右のXボタンを押してください。

これでほぼ完成ですが、最後に「セルの足し算」画面を表示するためのプログラムが必要です。標準モジュールのModule1(もしなかったら「挿入(I)」をクリックしてその中の「標準モジュール(M)」を選んでください)に
Sub total7()
UserForm1.Show
End Sub
と書き込んでください。エクセルの適当なセルに縦に3つ続けて数字を入力してこのtotal7プログラムを実行したら「セルの足し算」画面が表示されるので、数字を入れた最初のセルの名前(A1とか)を入力して、計算開始ボタンを押してください。

練習問題

1. 計算結果を出力するセルも指定できるように画面を

このように作り変えて、下側の白い箱に書かれた場所に結果を書くようにプログラムを修正してください。

2. 続けて計算できるように、計算開始ボタンを押して計算結果をセルに書いても、プログラムが終わらないようにしてください。そして

このように終わらせるためのボタンを作って、そのボタンを押したら終わるようにしてください。

3. プログラムを実行する度にセルの名前を入力するのも面倒ですね。プログラムを実行したときは初期値としてA1と書いてあるようにしましょう。

他のセルの計算をしたい時にはこのA1を消して書き直せば良いのです。このようなプログラムに修正してください。

4. 計算結果も「セルの足し算」画面に書いてしまいましょう。

計算結果をUserForm1.TextBox2.Textへ代入してください。

5. 最後に、計算プログラムをDo While~Loopを使って空白セルになるまで足し算を続けるプログラムを作ってみましょう。

0 件のコメント: