2014-01-31

統計的検定

統計的仮説検定について説明しました。来週の小テストは総復習ですので、これまでの小テストの内容を復習しておいてください。

2014-01-30

ユーザーフォームの作成

フォームの作成

メッセージボックスだけでは「はい」「いいえ」だけしか入力できませんので、自分でデザインできるフォームを使ってみましょう。

挿入から「ユーザーフォーム」を選びます。

するとこのような画面が開きますので、ここを自分でデザインします。

このフォームにはUserForm1という名前がついています。これは変更する必要がないのですが、画面に表示されるタイトルを変更しましょう。

画面の左下のプロパティの中のCaption欄がこのウィンドゥのタイトルですので、ここを「休講診断」に変更します。

すると画面のタイトルが「休講診断」に変更されました。

次にボタンを設置します。
休講診断のウィンドゥをクリックすると、「ツールボックス」が表示されます。

この中の「コマンドボタン」をクリックしてください。

するとボタンが表示されます。表示されている文字の変更もCaptionを書きかえればできます。

ここを「気象情報を確認」に書き換えてください。

次に、「気象情報を確認」をクリックしたときに開く2番目のウィンドゥを用意します。
先ほどと同じように挿入から「ユーザーフォーム」を選びます。

これにはUserForm2という名前がついています。 今度はこのウィンドゥのタイトルを「午前6時」にしてください。

次に、単に文字を表示する「ラベル」を入れます。

ツールボックスからラベルを選んでください。

UserForm2にラベルを置いて、Captionを「警報は発表されていますか?」に書き換えます。

さらに、先ほど同様にボタンを二つ置いて「はい」「いいえ」にします。

これらのボタンをクリックして、左側のプロパティのところを見てください。
CommandButton1というのがこのボタンの名前、CommandButtonというのがこのボタンの種類です。

マクロの用意

二つのFormを用意出来たので、「気象情報を確認」をクリックしたらUserForm2が表示されるようにします。

「気象情報を確認」のボタンをダブルクリックすると、マクロを書く部分が表示されます。

ここに
UserForm2.Show
Unload Me
と書きます。
最初のUserForm2.Showは、UserForm2を表示しなさい、という意味で、
次のUnload Meは自分自身(UserForm1)の表示を止めなさい、という意味です。

最後に、UserForm1を表示するマクロを書いて、実行してみましょう。

来週末までの課題

前回までのIF文を使った課題と同じ、以下の休講判断を、このフォームの組み合わせで作ってください。
UserForm3というフォームを作って「全ての授業休講」いうラベルと「はい」というボタンを置きます。そして先ほど作ったUserForm2で「はい」のボタンを押したらUserForm3が表示されるようにします。
UserForm4というフォームを作って「気象情報・交通機関の運行」というラベルと「確認」というボタンを置きます。そしてUserForm2で「いいえ」のボタンを押したらUserForm4が表示されるようにします。
UserForm5というフォームを作って午前8時40分での警報を確認します。警報がある方のボタンを押したら、先ほど作ったUserForm3が表示されるようにします。

2014-01-23

複雑なIF文

前回、迷う人が多かった箇所を簡略化して示します。
次の二つの例題に関して、xやyの値がどんな時に「いただきます」と表示されるのか、
表示される条件が例1と例2でどのように違うのか考えてみてください。
マクロを書いて実行するときにIfとEnd IFの対応が合ってなくてエラーになって、後からEnd Ifを書き足した時に、間違いの原因となります。

例1

If x > 0 Then
Msgbox ("こんにちは")
If y > 0 Then
Msgbox ("ありがとう")
Else
Msgbox ("こんばんは")
End If
Else
Msgbox ("さようなら")
If y > 0 Then
Msgbox ("おはよう")
Else
Msgbox ("いただきます")
End If
End If

例2:

If x > 0 Then
Msgbox ("こんにちは")
If y > 0 Then
Msgbox ("ありがとう")
Else
Msgbox ("こんばんは")
End If
Else
Msgbox ("さようなら")
End If
If y > 0 Then
Msgbox ("おはよう")
Else
Msgbox ("いただきます")
End If

このままでは、書いた私自身でも理解するのが大変難しいです。
そこで、If~Else~End Ifで囲まれた部分を少し右にずらします。

例1

If x > 0 Then
  Msgbox ("こんにちは")
  If y > 0 Then
    Msgbox ("ありがとう")
  Else
    Msgbox ("こんばんは")
  End If
Else
  Msgbox ("さようなら")
  If y > 0 Then
    Msgbox ("おはよう")
  Else
    Msgbox ("いただきます")
  End If
End If

例2:

If x > 0 Then
  Msgbox ("こんにちは")
  If y > 0 Then
    Msgbox ("ありがとう")
  Else
    Msgbox ("こんばんは")
  End If
Else
  Msgbox ("さようなら")
End If
If y > 0 Then
  Msgbox ("おはよう")
Else
  Msgbox ("いただきます")
End If

右にずらすのは人間が読みやすくするためであり、Excelの動作には関係ありません。
IfとEnd IFの対応が合わなくなるのを防ぐには、Ifを書いた時に中身を書く前にElseやEnd Ifを一緒に書いておくのが良いです。

前回の問題の続き

前回の条件分岐は、まず最初に二つに分かれます。

従って、マクロは
If 午前6時に警報は出ているか Then
  青の部分
Else
  緑の部分
End If
となり、さらに緑の部分が二つに分かれるので、

この部分を詳しく書き足して
If 午前6時に警報は出ているか Then
  青の部分
Else
  If 午前8時40分に警報は出ているか Then
    赤の部分
  Else
    黄の部分
  End If
End If
となります。
このようにIf Then~Else~End Ifの対応に注意しながら、包含関係を考えてください。

課題

前回の課題を完成させて、出来た人は次のフォームの作り方を自習してください。

フォームの作成

メッセージボックスだけでは「はい」「いいえ」だけしか入力できませんので、自分でデザインできるフォームを使ってみましょう。

挿入から「ユーザーフォーム」を選びます。

するとこのような画面が開きますので、ここを自分でデザインします。

このフォームにはUserForm1という名前がついています。これは変更する必要がないのですが、画面に表示されるタイトルを変更しましょう。

画面の左下のプロパティの中のCaption欄がこのウィンドゥのタイトルですので、ここを「休講診断」に変更します。

すると画面のタイトルが「休講診断」に変更されました。

次にボタンを設置します。
休講診断のウィンドゥをクリックすると、「ツールボックス」が表示されます。

この中の「コマンドボタン」をクリックしてください。

するとボタンが表示されます。表示されている文字の変更もCaptionを書きかえればできます。

ここを「気象情報を確認」に書き換えてください。

次に、「気象情報を確認」をクリックしたときに開く2番目のウィンドゥを用意します。
先ほどと同じように挿入から「ユーザーフォーム」を選びます。

これにはUserForm2という名前がついています。 今度はこのウィンドゥのタイトルを「午前6時」にしてください。

次に、単に文字を表示する「ラベル」を入れます。

ツールボックスからラベルを選んでください。

UserForm2にラベルを置いて、Captionを「警報は発表されていますか?」に書き換えます。

さらに、先ほど同様にボタンを二つ置いて「はい」「いいえ」にします。

これらのボタンをクリックして、左側のプロパティのところを見てください。
CommandButton1というのがこのボタンの名前、CommandButtonというのがこのボタンの種類です。

マクロの用意

二つのFormを用意出来たので、「気象情報を確認」をクリックしたらUserForm2が表示されるようにします。

「気象情報を確認」のボタンをダブルクリックすると、マクロを書く部分が表示されます。

ここに
UserForm2.Show
Unload Me
と書きます。
最初のUserForm2.Showは、UserForm2を表示しなさい、という意味で、
次のUnload Meは自分自身(UserForm1)の表示を止めなさい、という意味です。

最後に、UserForm1を表示するマクロを書いて、実行してみましょう。

2014-01-16

対話型プログラム

条件分岐

場合分けのためのIF文は重要ですので、今週もIF文の使い方を中心にします。

InputBox

昨年は1から100までの合計を計算しましたが、マクロを実行する時に、幾つまでの合計を計算するか尋ねるマクロを書いてみましょう。

Sub 対話型合計()
n = InputBox("幾つまでの和を計算しますか")
'ここに1からnまでの合計を計算してwaという変数に代入するプログラムを書いてください
cells(1,1)=wa
End Sub

条件分岐

先ほどのマクロを、正の数が入力された時だけ計算するように書き換えましょう。
このような条件判断にはIf文を使います。
If文の書き方は、

If 条件 Then
 条件が成り立つときに実行する文
End If

でしたので、

Sub 対話型合計()
n = InputBox("幾つまでの和を計算しますか")
If n > 0 Then
 'ここに1からnまでの合計を計算してwaという変数に代入するプログラムを書いてください
 cells(1,1)=wa
End If
End Sub

と書きます。

数字の判定

先ほどのInputBoxに、数字以外のものを入れると計算できません。
だから、単に0より大きいかどうかだけでなく、数字かどうかも含めて判定しましょう。
nが数字かどうかは

IsNumeric(n)

で判断します。
If文で、二つの条件が共に成り立つことは And で表すので、If文は

If IsNumeric(n) And n > 0 Then

となります。

Else文

条件が成り立たなかった場合に実行する文がある時には

If 条件 Then
 条件が成り立つときに実行する文
Else
 条件が成り立たなかったときに実行する文
End If

のように書きます。

練習

  • 正の数が入力されたらその数までの和を計算して表示する
  • 正の数が入力されなかったら、「正の数を入力してください」というメッセージを表示する
このようなマクロを書いてください。
メッセージを表示するには

MsgBox ("正の数を入力してください")

と書きます。

MsgBoxの使い方

MsgBox( )の(括弧)の中に" "で囲まれた文字を書くと、その文字が表示されます。

MsgBox ("正の数を入力してください")

" "なしで変数の名前を書くと、その変数の値が表示されます。
例えば、和を計算するプログラムで
Cells(1, 1) = wa
の代わりに
MsgBox(wa)
と書いてみてください。

MsgBoxによる質問

MsgBoxは、単に文字を表示するだけでなく、OK、キャンセルなど、どのボタンがクリックされたかを知ることも出来ます。
試しに

x = MsgBox("あなたはお昼ごはんを食べましたか", 4, "質問")
If x = 6 Then
  MsgBox ("午後も元気ですね")
Else
  MsgBox ("ちゃんと食べてくださいね")
End If

を実行して、質問に答えてください。

使い方一覧

aとかbの文字は必要に応じて書き換えてください。

x = MsgBox("a", 0, "b")

x = MsgBox("a", 1, "b")

OKをクリックするとxに1が代入され、キャンセルをクリックするとxに2が代入されます。

x = MsgBox("a", 1, "b")
MsgBox (x)

を実行して、xの値を確かめてください。

他にも、次のようなメッセージボックスがあります。

x = MsgBox("a", 2, "b")

x = MsgBox("a", 3, "b")

x = MsgBox("a", 4, "b")

x = MsgBox("a", 5, "b")

クリックしたボタンとxに代入される値の関係は次のようになっています。

1OK
2キャンセル
3中止
4再試行
5無視
6はい
7いいえ

練習問題

この流れ図をマクロに書いてください。

2014-01-10

中心極限定理

標本平均の確率分布が正規分布で近似できるという、中心極限定理について説明しました。

農学部の工事が始まって、植物が抜かれていました。花の季節になると枝が伸びて綺麗な花を咲かせてくれていたのですが。

2014-01-09

行列の計算

明けましておめでとうございます。
冬休みの間にgmailの仕様が変更されたので、ログインした時に次のような画面が表示されると思います。

ここに書かれているように、メールの中に画像を表示するときの安全性が向上したということですので、OKを押してください。

前回の解答

Sub 数えて足す()
Dim x() '配列xは、個数を指定せずにおきます。
j = 1
Do While Cells(j + 1, 2) <> ""
  j = j + 1
Loop
人数 = j - 1
'人数を数えたので配列を用意して身長のデータを読み込みます。
ReDim x(人数)
For j = 1 To 人数
  x(j) = Cells(j + 1, 2)
Next j
'全てのデータを足します。
wa = 0
For j = 1 To 人数
  wa = wa + x(j)
Next j
'合計と、人数で割った平均をシートに書き込みます。
Cells(人数 + 3, 1) = "合計"
Cells(人数 + 3, 2) = wa
身長の平均 = wa / 人数
Cells(人数 + 4, 1) = "平均"
Cells(人数 + 4, 2) = 身長の平均
End Sub

行列の計算

Excelには行列の掛け算をしたり、逆行列を求める機能があります。
マクロを使って行列の演算をしてみましょう。

行列の準備

次のように行列を入力してください。

エクセルのワークシートのどの部分が行列なのかを指定します。

Sub 行列()
Dim A As Range
Set A = Range(Cells(1, 1), Cells(2, 2))

最初に、Aはワークシートの範囲を指定するものだと宣言して
次にCells(1, 1)からCells(2, 2)までの長方形が行列Aの範囲だと指定します。

演算してみましょう。
行列一つだけで計算できる例として、転置と、行列式を求めてみます。

Dim B As Range
Set B = Range(Cells(4, 1), Cells(5, 2))
B = Application.Transpose(A)

これで、行列Bの場所であるCells(4, 1)からCells(5, 2)までの長方形に行列Aの転置が出力されます。

Cells(7, 1) = Application.MDeterm(A)

これで、行列Aの行列式がCells(7, 1)に出力されます。

行列の掛け算

今度は二つの行列を掛け算した行列を求めましょう。
エクセルのシート1とシート2の両方に先ほどの行列を書いてください。

Sub 掛け算()
Dim A As Range, B As Range, C As Range
Set A = Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(2, 2))
Set B = Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(2, 2))
Set C = Range(Sheets(3).Cells(1, 1), Sheets(3).Cells(2, 2))
C = Application.MMult(A, B)
End Sub

これでシート3の行列Cに、行列の積ABが出力されます。
必ず「標準モジュール」にマクロを書いてください。

連立一次方程式

を解いてみましょう。
と置くと、連立一次方程式は
Ax=b
と書けます。
この式に左からAの逆行列を掛けて
x=A-1b
ですから、エクセルを使って計算するのは
Aの逆行列A-1
A-1とbの行列の積
です。
シート1のCells(1, 1)からこの連立一次方程式の係数行列と定数項を並べて

このように代入します。
この中のCells(1, 1)からCells(2, 2)までの長方形を行列A
Cells(1, 3)からCells(2, 3)までの長方形を行列B
シート2のCells(1, 1)からCells(2, 2)までの長方形にAの逆行列を代入するのでここを行列C
シート3のCells(1, 1)からCells(2, 1)までの長方形に、答えの行列行列を代入するのでここを行列D
とします。

Sub renritsu()
Dim A As Range, B As Range, C As Range, D As Range
Set A = Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(2, 2))
Set B = Range(Sheets(1).Cells(1, 3), Sheets(1).Cells(2, 3))
Set C = Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(2, 2))
Set D = Range(Sheets(3).Cells(1, 1), Sheets(3).Cells(2, 1))
C = Application.MInverse(A)
D = Application.MMult(C, B)
End Sub

解けない場合の処理

は解くことが出来ません。
このような場合に対処するために、逆行列を求める前に行列式を計算して、行列式が0ではない場合だけ連立一次方程式を解くようにしましょう。
場合分けにはIf文を使います。

If 条件 Then
'ここに条件が成立した時に実行する文を書く
Else
'ここに条件が成立しなかった時に実行する文を書く
End If

このように書きます。
条件が成立しなかった時は何も実行しないなら

If 条件 Then
'ここに条件が成立した時に実行する文を書く
End If

練習

ここまでに説明したことを使って、解ける方程式は解く、解けない方程式は「解けません」と表示するマクロを書いてください。
解けないと表示するためには
msgbox("解けません")
と書きます。

出来た人は次の方程式を解いてください。

2013-12-20

統計量の確率分布

標本平均、標本分散などの統計量の、確率分布の平均と分散について説明しました。

2013-12-19

データの集計

最初に、前回の練習問題「九九の表」の説明をします。

For文を使った足し算

1から10までの数の合計を計算しましょう。
cells(1,1)=1+2+3+4+5+6+7+8+9+10
と書いても計算できますが、これでは「1から100までの数の合計を計算しなさい」と言われた時に大変です。
同じような作業の繰り返しはパソコンに任せましょう。

sub 足し算()
wa=0
for j=1 to 10
  wa=wa+j
next j
cells(1,1)=wa
end sub

と書いて実行すると、cells(1,1)に1から10までの数の合計が計算されます。
理由は、まず最初にwa=0にしておいて
wa=wa+1 (この時点でwaは1)
wa=wa+2 (この時点でwaは1+2)
wa=wa+3 (この時点でwaは1+2+3)
wa=wa+4 (この時点でwaは1+2+3+4)
wa=wa+5 (この時点でwaは1+2+3+4+5)
wa=wa+6 (この時点でwaは1+2+3+4+5+6)
wa=wa+7 (この時点でwaは1+2+3+4+5+6+7)
wa=wa+8 (この時点でwaは1+2+3+4+5+6+7+8)
wa=wa+9 (この時点でwaは1+2+3+4+5+6+7+8+9)
wa=wa+10(この時点でwaは1+2+3+4+5+6+7+8+9+10)
となるからです。

練習:1から100までの数の合計を計算しなさい。

For文を使った足し算

実際のデータの足し算をしてみましょう。
以前と同じデータを使います。
生徒身長座高
115988
215084
315786
415381
515883
615285
715583
815783
914576
1015885
1116185
1215083
1314879
1415484
1515485
1615985
1714983
1815586
1915384
2016088
出典

これをA1セルから貼り付けます。
すると20人の身長はB2からB21、つまりCells(2,2)からCells(21,2)にあります。
このままでは番号が分かりづらいので、x(1), x(2),...,x(20)という変数を用意して、そこへ代入します。

sub 身長と座高()
dim x(20)
for j=1 to 20
  x(j)=cells(j+1,2)
next j
end sub

ここまででは身長のデータを配列x(1), x(2),...,x(20)に読み込んで終わりです。
練習:20人の身長の合計を計算して、一行あけたcells(23,2)に代入するようにマクロを書き足しなさい。
sub 身長と座高()
dim x(20)
for j=1 to 20
  x(j)=cells(j+1,2)
next j
ここに身長の合計を変数 wa に代入するマクロを書く
cells(23,1)="合計"
cells(23,2)=wa
end sub

合計を計算したら続けて平均も計算できます。
変数名に漢字を使うこともできます。

sub 身長と座高()
dim x(20)
for j=1 to 20
  x(j)=cells(j+1,2)
next j
ここに身長の合計を変数 wa に代入するマクロを書く
cells(23,1)="合計"
cells(23,2)=wa
身長の平均=wa/20 cells(24,1)="平均"
cells(24,2)=身長の平均
end sub

"平均"のように " " で囲むと 平均 という文字が表示され、囲まないと 身長の平均 という変数に代入された値が表示されます。

While文を使って個数を数える

今回は20人のデータでしたが、一つのマクロを複数のデータに対して用いる場合は、データによって人数が一定とは限りません。
そのような場合のために、マクロの最初で人数を数えましょう。

数える操作は何回繰り返すかが分かっておらず、上から順に見ていって最後に到達するまで繰り返します。
このように、条件を指定して繰り返すにはWhile文を使います。

Do While 条件
 この部分が繰り返される
Loop

先ほどのマクロのEnd Subより後に、次のマクロを書いてみてください。

Sub 数える()
j = 1
Do While Cells(j + 1, 2) <> ""
  j = j + 1
Loop
人数=j
MsgBox (人数)
End Sub

最後のMsgBox(人数)は、人数という変数の値を表示するマクロです。
Cells(j+1,2)が空っぽではない間は繰り返す、という意味です。
正しく数えられましたか?ずれていた場合はその理由を考えましょう。

配列の大きさを変更する。

人数が分かったので配列を用意するときに

Dim x(人数)

と書きたいのですが、これではエラーになります。
配列を用意するときの(括弧)の中に変数を書くことは出来ません。
マクロの途中で配列の大きさを変えるには、まず最初に

Dim x()

のように(括弧)の中に何も書かずに
人数を数えた後で

ReDim x(人数)

と書きます。

練習

先ほど作ったマクロを、最初から20人に限らず、マクロの中で人数を数えて配列を用意して計算するように改造してください。

2013-12-17

回帰係数の検定

温暖化しているか否かの検定をしました。

気象データ繋がりで、講義とは関係ないですが
ブライトバンド総論
雨雲レーダーに映る円形の雨雲は、実際に円形に雨が降っているわけではないそうです。
詳しいメカニズムはこのリンク先にありますが、円形の中心にレーダーがあるそうです。

2013-12-13

期待値

確率分布の期待値、分散の定義と定理を説明しました。

2013-12-12

Excelのマクロ

HTMLの課題

自分でテーマを決めて、ホームページを作ってください。 内容は何でもいいですが、例えばパワーポイントの課題と同じテーマを使えば内容を新たに考える手間が省けます。
条件は

  1. 少なくともindex.htm, link.htm, index1.htm の3つのファイルを作って下さい。index2.htmなどもっと作っても構いません。
    index.htmは http://www.edu.cc.okayama-u.ac.jp/[公開DIR名]/ と指定すれば他の人からも読むことが出来ます。それ以外のページは、例えばlink.htmだったら http://www.edu.cc.okayama-u.ac.jp/[公開DIR名]/link.htm と指定すれば読むことが出来ます。
  2. index.htmからはlink.htm, index1.htmへのリンクを作り、link.htm, index1.htmからindex.htmに戻るリンクを作って下さい。
  3. link.htmには他のサイト(友達、僕、岡山大学、外部などどこでもいいです)へのリンクを作って下さい。
  4. 画像を貼る
  5. 色をつける。文字の色でも背景の色でもいいです。
  6. 練習問題2の表を入れる。この表を入れておけば、もっと別の表を入れても構いません。
  7. 岡山駅から、どこか行ってみたい場所への経路を示す地図を入れてください。
    但し、自宅や友人宅など、個人的な場所は駄目です。このページは学内の誰からも見ることが出来ますから。
以上を満たすページを作って、それを他の人が見るためのアドレス http://www.edu.cc.okayama-u.ac.jp/[公開DIR名]/ をメールで送ってください。


Excelの自動処理

Excelで多くのデータを処理していると、同じような操作の繰り返しで面倒になります。
エクセルは、プログラムを書くことで処理を自動化出来ます。
プログラムのことを、マクロとも呼びます。

準備

最初に一度だけやっておくことがあります。
エクセルのファイルからオプションを選びます。

左側で「リボンのユーザー設定」を選んで、右側の「開発」にチェックをつけます。

すると「開発」タブが表示されるので、「マクロのセキュリティ」をクリックします。

すべてのマクロを有効にする(推奨しません。危険なコードが実行される可能性があります)をクリックします。
ここで警告されたように自分で作ったプログラムだけでなく、他の人が作った危険なプログラムも実行できるようになってしまいます。
インターネットからダウンロードしたエクセルファイルを開くときには「警告を表示してすべてのマクロを無効にする」を選んでください。

これで準備は終わりです。

マクロでどんなことが出来るか?

マクロを使うとどんなことが出来るか確かめるために、開発タブの「マクロの記録」をクリックします。

名前は何でもいいのでこのままOKをクリックします。

セルに1,2,3,4,5を入力して、記録終了をクリックします。

ここで、先ほど入力した1,2,3,4,5を全部消してから、「マクロ」をクリックします。

どのマクロを実行するか聞かれるので、そのまま「実行」をクリックします。

すると先ほど入力した1,2,3,4,5が再び入力されます。

このように、マクロを使うと、エクセルの操作を自動化出来ます。
どんな仕組みになっているか見てみましょう。
開発タブのVisual Basicをクリックします。

左側の、標準モジュールの中のModule 1をクリックすると、エクセルが記録したマクロが表示されます。

これが先ほど行った、1,2,3,4,5を縦に順に記録する操作をプログラムに書いたものです。
これから、このプログラムの書き方を勉強しましょう。

自分で書いてみる

新規に書くために、Excelを保存せずに終了させて、もう一度立ち上げてください。
「開発」タブから「Visual Basic」を起動します。

「挿入」から「標準モジュール」を選びます。

するとマクロを書くための場所が開きます。

ここに
sub 練習
とだけ書いてEnterを押します。すると
Sub 練習()

End Sub
となります。

このSub 練習()とEnd Subの間に自分でマクロを書きます。

cells(1,1)=1
と書いて、その上の右向きの三角形をクリックします。

するとエクセルの、上から1行目、左から1列目のセルに1と入力されています。
等号は、左辺を右辺と等しくするという意味で、右側の1を左側のCells(1, 1)に代入します。

さらにCells(1,1)=1とEnd Subの間に
cells(2,1)=2
cells(3,1)=3
cells(1,2)=-2
cells(1,3)=-3
と書いて実行して、cellsの二つの添え字がエクセルの縦と横のどちらに対応しているか確かめてください。

For文

Cells(1, 1) = 1
Cells(2, 1) = 2
Cells(3, 1) = 3
Cells(4, 1) = 4
Cells(5, 1) = 5
Cells(6, 1) = 6
Cells(7, 1) = 7
Cells(8, 1) = 8
Cells(9, 1) = 9
Cells(10, 1) = 10
と書くのは大変です。このような似ている処理を繰り返すために
For j = 1 To 10
  Cells(j, 1) = j
Next j
と書くことが出来ます。

練習問題

次の九九の表を作るマクロを書いてください。但し掛け算はセルに入力するときと同じく * です。

保存するときの注意

名前を付けて保存から、必ず「Excelマクロ有効ブック(*.xlsm)」を選んでください。Excelブック(*.xlsx)だとマクロが保存されません。

For文を使った足し算

1から10までの数の合計を計算しましょう。
cells(1,1)=1+2+3+4+5+6+7+8+9+10
と書いても計算できますが、これでは「1から100までの数の合計を計算しなさい」と言われた時に大変です。
同じような作業の繰り返しはパソコンに任せましょう。

sub 足し算()
wa=0
for j=1 to 10
  wa=wa+j
next j
cells(1,1)=wa
end sub

と書いて実行すると、cells(1,1)に1から10までの数の合計が計算されます。
理由は、まず最初にwa=0にしておいて
wa=wa+1 (この時点でwaは1)
wa=wa+2 (この時点でwaは1+2)
wa=wa+3 (この時点でwaは1+2+3)
wa=wa+4 (この時点でwaは1+2+3+4)
wa=wa+5 (この時点でwaは1+2+3+4+5)
wa=wa+6 (この時点でwaは1+2+3+4+5+6)
wa=wa+7 (この時点でwaは1+2+3+4+5+6+7)
wa=wa+8 (この時点でwaは1+2+3+4+5+6+7+8)
wa=wa+9 (この時点でwaは1+2+3+4+5+6+7+8+9)
wa=wa+10(この時点でwaは1+2+3+4+5+6+7+8+9+10)
となるからです。

練習:1から100までの数の合計を計算しなさい。