プログラムの7つの約束プログラムの つの約束 (Excel VBScript)

7つの約束と7つ命令で本格プログラミングを-Excelで本物っぽいプログラミングに挑戦-(1)プログラムは「Sub プログラム名」から始まり「End Sub」で終わる。
(2) 命令は行の上から順番に実行される。
(3) プログラムの四則演算(＋－×÷)には+-*/の記号を使う。計算の順番は通常と同様乗算除算が加算減算より先に行われる。カッコ()で計算の順番を変えることができる。
(4) プログラムの中で一時的に値を記録できる変数を定義できる。変数名はアルファベットから始まる文字で定義する。また変数は数式の中でも使用できる。X*5+1など。
(5) プログラムで使う=は、右辺の計算結果を左辺の変数に入れる意味を持っている。
(6) 変数は配列としても定義できる。Dim 変数名(配列の数)(7) 文字は””で囲んで定義する。 “Hello”など

今回は本格的なプログラミングに挑戦していきます。

X = X +1
(X X + 1のイメージ)

X=11

多くのルールを守って野球をやれる人ならば、7つの約束と7つの命令しかないプログラムは簡単に組めるはずです。

Ver. 1.0 (2014/06/20) © Go Ota, 2014

Xと名前をつけた箱(変数)に1を入れる

1.初めにXの箱(変数)の中を取り出し+1する。
2. 1.の計算結果をXの箱(変数)に入れなおす。

約束の(1)-(3)はあまり難しくないかと思います。(6)は難しいので、今回の授業ではやりません。
(4)と(5)は普通の数学の=とは違う意味なのでイメージを示してみました。

1

プログラムで使う7つの命令プログラムで使う つの命令 (Excel VBScript)(1) IF..Thenという命令がある。
If 条件 Then
実効する命令(複数可)End If の形式で使い、条件が正しければ命令を実行する。
(2) If..Then..Elseという命令がある。
If 条件 Then
実効する命令1(複数可)Else実効する命令2
End Ifの形式で使い、条件が正しければ命令1を、正しくなければ命令2を実行する。
(3) For..Nextという命令がある。
For 変数 = 初期値 to 終了値
実行する命令(複数可)
Nextの形式で使い、変数の値を初期値から終了値まで1づつ増やしながら命令を繰り返し実行する。
(4) Do While ... Loopという命令がある。
Do While 条件
実行する命令(複数可)
Loop の形式で使い、条件が正しい間、命令を繰り返して実行する。

X+1

2

7つの約束とつの約束と7つの命令の練習
つの約束と つの命令の練習(1)
つの命令の練習 プログラムを作る(5) 条件は数式又は変数 比較演算子 数式又は変数で指定し、比較演算子は=, <>, >, <, >=,<=が使用できる。
(6) Excelでは、シート内のセルをWorksheets("シート名シート名").Cells(行番号,列シート名番号)の形式で変数と同様に使用できる。
(7) 指定した変数の整数部分の取り出し、Sin, Cosなどを計算するプログラムが関数関数と関数して組み込まれて利用できる。

日本語だと(2)もし…ならば…他の場合(3)それぞれ…次に(4) ..の間実行…繰り返すという意味になり、すぐにわかるんですがSub Test()
A = 10B = 20
C=A+B
Worksheets("IO1").Cells(1, 1) = C
End Sub
3

プログラムを作る言語はいろいろありますが、授業ではExcelの中で使えるVBSciriptを使います。
ビデオの見ながら、足し算をするプログラムを入力して実行してみてください。
うまくいったら、友達通しでプログラムを意味を考えましょう。(ProgExcel練習用_140620.xlsm)を使います。

初めのプログラム早く終わった人は、ビデオを見ながら四則演算(+-*/)を計算するプログラ
ムを作りましょう
四則演算

47つの約束とつの約束と7つの命令の練習
つの約束と つの命令の練習(2)
つの命令の練習 データを入力する
Sub Test2()
A = 10B = 20Worksheets("IO1").Cells(1, 1) = A + B
Worksheets("IO1").Cells(2, 1) = A - B
Worksheets("IO1").Cells(3, 1) = A * B
Worksheets("IO1").Cells(4, 1) = A / B
End Sub

7つの約束とつの約束と7つの命令の練習
つの約束と つの命令の練習(3)
つの命令の練習 If… Then…

Sub Test3()
A = Worksheets("IO1").Cells(1, 1)
B = Worksheets("IO1").Cells(1, 2)
Worksheets("IO1").Cells(1, 1) = A + B
Worksheets("IO1").Cells(2, 1) = A - B
Worksheets("IO1").Cells(3, 1) = A * B
Worksheets("IO1").Cells(4, 1) = A / B
End Sub

Bに0が入るようにシートに入力

改良
0での除算のエラーが発生

Module3

End Sub

Module4

A = Worksheets("IO1").Cells(1, 1)
B = Worksheets("IO1").Cells(1, 2)

左側は四則演算を計算するプログラムです。この場合、計算したい数値はプログラムの中で定義しているので、別の数値を計算したい時は、プログラムの中の数字を変更する必要があります。
右側のプログラムはこの点を改良したものです。AとBに入れる数値はExcelのシートから取り出しています。シートの値を変更することによって、プログラムを変更することなく、いろいろな数値の計算ができます。

前スライドのプログラムでBに0が設定させるようにExcelのシートに入力すると、実行時にエラーが発生します。
これは、0での割り算が起きるためです。
これをIF命令を使って、0以外の時に割り算を実行するように変更すると、このエラーを回避することができます。

○ 比較演算子 △ の条件を指定。
○ = △ (等しい場合は)○ <> △ (等しくない場合)○ > △ (○が大きい)○ < △ (○が小さい:未満)○ >= △ (○が大きいか等しい:以上)○ <= △ (○が小さいか等しい:以下)

5

7つの約束とつの約束と7つの命令の練習
つの約束と つの命令の練習(4)
つの命令の練習 If… Then…Else
Sub Test5()
A = Worksheets("IO1").Cells(1, 2)
B = Worksheets("IO1").Cells(2, 2)
Worksheets("IO1").Cells(1, 1) = A + B
Worksheets("IO1").Cells(2, 1) = A - B
Worksheets("IO1").Cells(3, 1) = A * B
If B = 0 Then
Worksheets("IO1").Cells(4, 1) = "0での割り算"
Else
Worksheets("IO1").Cells(4, 1) = A / B
End IfEnd Sub

Sub Test4()
A = Worksheets("IO1").Cells(1, 2)
B = Worksheets("IO1").Cells(2, 2)
Worksheets("IO1").Cells(1, 1) = A + B
Worksheets("IO1").Cells(2, 1) = A - B
Worksheets("IO1").Cells(3, 1) = A * B
If B <> 0 Then
Worksheets("IO1").Cells(4, 1) = A / B
End If6

7つの約束とつの約束と7つの命令の練習
つの約束と つの命令の練習(5)
つの命令の練習 For… Next
Sub Next1()
S=0
For A = 1 To 10
S=S+A
Next
Worksheets("IO1").Cells(1, 1) = S
End Sub0での割り算の指定

Module5
前のプログラムでは0での割り算が発生した時は、特に何も表示されません。
IF.. Then…Else命令を使うと、0の時も、対応したメッセージを表示することができるようになります。

実行結果

Module6
Sub Next2()
S=0
For A = 1 To 10
Worksheets("IO1").Cells(A, 1) = A
S=S+A
Next
Worksheets("IO1").Cells(A, 1) = S
End Sub

実行結果

Module77

For.. Next命令を使うと、同じ処理を繰り返して実行することができます。Module7でわかるように、Aという変数が1づつ増加して10まで、結局10回繰り返されます。

8フローチャートの書き方と命令の関係

フローチャートの書き方

分岐型
プログラムの開始と終わり

処理の流れの表記(アルゴリズム
処理の流れの表記 アルゴリズム)アルゴリズム
逐次型(直線型)
分岐型

No
No

No

(開始)
処理1

(終了)

Yes

条件

条件

処理2

条件

Yes

Yes

Yesの処理Yesの処理IF 条件 Then
処理
End If

No

条件
Yes

処理1

処理

処理2

IF 条件 Then
処理1
Else
処理2
End If

Noの処理

処理3
ループ型(繰返し型)
X=A

プログラムや人間の判断などのアルゴリズムは基本的に、逐次型、分岐型、ループ型の組み合わせで表現できますね。

ループ型(繰返し型)
No
Yes

ループの処理

Yes

終了条件
No

ループの処理No

処理
終了条件

ループの処理
X=X+1

Yes

無限ループ

後判断ループ前判断ループ9演習:
以下の偶数の合計を表示するプログラム
演習 10以下の偶数の合計を表示するプログラム

10

演習:
以下の偶数の合計を表示するプログラム例
演習 10以下の偶数の合計を表示するプログラム例
Sub SUME1()
Worksheets("IO1").Cells(1, 1) = 30
End Sub

For.. Next命令の例で1から10までの合計を計算するプログラムを示しました。こんどは2+4+6..+10のように10以下の偶数の合計を表示するプログラムを作成してください。プログラムは一つだけではなく、いろいろな方法で表示するプログラ
ムを複数開発してみましょう。(下記の内容も参考にしてください)
参考1:のより詳細の指定
参考 For..Nextのより詳細の指定
X=A

X <= BFor 変数(X) = 初期値(A) To 終了値(B)処理
Next
フローチャートと今回勉強している命令の関係を示しました。
For.. Nextは少し複雑ですね。

For 変数(X) = 初期値(A) To 終了値(B) Step 増分(C)処理
Yes Next

Sub SUME2()
Worksheets("IO1").Cells(1, 1) = 2 + 4 + 6 + 8 + 10
End Sub

Sub SUME3()
S=0
For A = 2 To 10 Step 2
S=S+A
Next
Worksheets("IO1").Cells(1, 1) = S
End Sub

Sub SUME4()
S=0
For A = 1 To 5
S=S+A*2
Next
Worksheets("IO1").Cells(1, 1) = S
End Sub

Sub SUME5()
S=0
X=0
For A = 1 To 5
X=X+2
S=S+X
Next
Worksheets("IO1").Cells(1, 1) = S
End Sub

Sub SUME6()
S=0
For A = 1 To 10
If A = Int(A / 2) * 2 Then
S=S+A
End IfNext
Worksheets("IO1").Cells(1, 1) = S
End Sub

X>B
No

処理
X=X+C

参考2:
関数
参考 整数部分を取り出すINT関数
整数部分を取り出すA = 1.5
B = INT(A)

いくつ作ることができましたか?、いんちきみたいなものもありますが「合計を表示する」という意味で、すべて正解です。どれが一番良いかは、それを利用する場面によって判断されます。

<= Bには1が入る
1112

7つの約束とつの約束と7つの命令の練習
つの約束と つの命令の練習(5)
つの命令の練習 Do… Loop 値の数がわからない合計を計算する

少し実用的なプログラム(1)少し実用的なプログラム 合計を計算する
Sub APP1()
S=0
For A = 1 To 10
X = Worksheets("IO1").Cells(A, 1)
S=S+X
Next
Worksheets("IO1").Cells(1, 2) = S
End Sub

合計

合計を計算する10個の値

Module8

Sub APP2()
S=0
A=1
X = Worksheets("IO1").Cells(A, 1)
Do While X <> 999
S=S+X
A=A+1
X = Worksheets("IO1").Cells(A, 1)
Loop
Worksheets("IO1").Cells(1, 2) = S
End Sub

合計合計を計算する値
終了を判断する値

Module9

前のFor.. Nextのプログラムを少し改良してみました。Excelのシートに入力した値の合計を求めるプログラムです。
なんとなく実用的なプログラムですね。

合計する値の数がわからない場合があります。
このような時、最後に計算を終了するような目印をつけて、そこまで計算するというようなプログラムを作ることができます。
例えば、テストの点数だと100点までなので、999を終了の目印にすることができます。
そしてDo While … Loop命令を使うと、この終了の値を上手に判断することができます。

13

Do… Loop 値の数がわからない合計を計算する。のフローチャート
Sub APP2()
S=0
A=1
X = Worksheets("IO1").Cells(A, 1)
Do While X <> 999
S=S+X
A=A+1
X = Worksheets("IO1").Cells(A, 1)
Loop
Worksheets("IO1").Cells(1, 2) = S
End Sub

14

少し実用的なプログラム(2)少し実用的なプログラム 九九の表を作る(開始)

Sub APP99()
For I = 1 To 9
For J = 1 To 9
Worksheets("IO1").Cells(I, J) = I * J
Next
Next
End Sub

S=0
A=1
X = Worksheets("IO1").Cells(A, 1)

Module10

Do
X <> 999

No

For.. Next命令の中にさらにFor..Next
命令を入れることもできます。こんな簡単なプログラムでも九九の表をつくることができます。
このような繰り返しのプログラムはコンピュータの特異なことですね。

Yes

Module9
S=S+X
Do.. Loop命令に入る前と、Do..Loop命令の最後で、条件を確認するXの値を入れ替えることがポイントです。

A=A+1
X = Worksheets("IO1").Cells(A, 1)

Loop
Worksheets("IO1").Cells(1, 2) = S
(終了)

1516

演習:
つの値でできる三角形の判断
演習 3つの値でできる三角形の判断

少し実用的なプログラム(3)少し実用的なプログラム 正三角形の判断
Sub APPT()A = Worksheets("IO1").Cells(1, 1)
B = Worksheets("IO1").Cells(2, 1)
C = Worksheets("IO1").Cells(3, 1)
If A = B Then
If B = C Then
Worksheets("IO1").Cells(4, 1) = "正三角形です"
ElseWorksheets("IO1").Cells(4, 1) = "正三角形以外の値です"
End If
ElseWorksheets("IO1").Cells(4, 1) = "正三角形以外の値です"
End IfEnd Sub

演習A
演習 正三角形、二等辺三角形を判断する。
前のプログラムをもとに、3つの値を設定して・正三角形です。
・二等辺三角形です。
・他の三角形の組み合わせです。と判断・表示するプログラムを作成します。
演習B
演習 三角形ができない場合も判断する。
3つの値には0以上の整数(0, 1, 2, 3, …)を指定することとして、・正三角形です。
・二等辺三角形です。
・不等辺三角形です。
・三角形ができません。
・辺として不正な長さが指定されています。と判断・表示するプログラムを作成します。
例えば、どれか一つでも0が指定されていたら、最後のメッセージを表示します。また、2,3,6の組み合わせでは三角形ができません。

Module11
If… End If命令の中にIf End Ifを入れることもできます。こうすることにより複雑な判断ができるようになります。
またIf命令の中にFor..Next命令、For..Next
命令の中にIf命令を入れて組み合わせて使うことももちろんできます。
17

原理的に、今回勉強したプログラムの範囲で、数値を扱う、どんなプログラムも作成することができます。

18