覚える言語はたったの5つ(制御編)

覚える言語はたったの5つ

プログラムを組んでなにかしかの自動実行を行う場合その動作を記述してやる必要があります。このプログラム構造は実はそんなに複雑ではありません。

プログラム言語には大別すると2種類の言語体系が存在します。

ひとつは命令語系です。

これは実際に動作を直接的に指示するもので、いわゆるコマンドたちのことです。

セルに数字を入れたり、コピーペーストしたりがこれらに当てはまります。

ExcelVBAには大量のコマンドがあり、これらをすべて覚えるのはおそらく不可能です。

しかしエクセルにはこれらを自動的に記述、記録してくれるマクロレコーダーがありますので、とりあえず忘れてしまってまったく問題ありません。

さて、本題のもうひとつ制御系です。

制御系の命令は判断、分岐、繰り返し等なので覚えておくのは5つです。

具体的には以下のIF文FOR NEXT文DO LOOP文WHILE,UNTIL)、CALL文 ということになります。


分岐 IF文

条件判断で別の作業を分岐させることができます。

文法1)
IF (条件式) THEN
(実行式1)
ELSE
(実行式2)
END IF

文法1は”もし(条件式)が正だったら(実行式1)を実行
違ったら (実行式2)を実行”ということになります。

例)
IF x>=10 THEN
y=1
ELSE
y=2
END IF

例では”もしxが10以上だったらyは1、じゃなかったらyは2”となります。

文法2)
IF (条件式1) THEN
(実行式1)
ELSE IF (条件式2) THEN
(実行式2)
END IF

文法2は”もし(条件式1)が正だったら(実行式1)を実行
違ったばあいにもし(条件式2)が正だったら (実行式2)を実行”ということになります。
この場合(条件式1)にも(条件式2)にも当てはまらない場合にはどちらも実行しないということができます。

例)
IF x>=10 THEN
y=1
ELSE IF x<=8 THEN
y=2
ELSE
y=3
END IF

例では”もしxが10以上だったらyは1、じゃなくて8以下だったらyは2、
それでもなったら(x=9)、yは3”となります。

ページトップへ


繰り返しその1 FOR文

命令を望んだ回数繰り返し実行します。

文法)
FOR (初期値) TO (最終値)
(実行式)
NEXT

まず(初期値)から1ずつ足していき(最終値)までの回数を"NEXT"までの実行式)を繰り返し行うというものです。

例)
FOR i=1 TO 10
x=5*i
NEXT

例では初期値が1で10まで繰り返すということになります。
したがってxの計算結果は順に5,10,15,20・・・・・45,50となります。

ページトップへ


繰り返しその2 DO・・・LOOP /WHILE文

命令を条件が合わなくなるまで繰り返します。間違うまで繰り返しです。

文法1)
DO
(実行式)
LOOP WHILE (評価式)

最低1回はループ内の(実行式)を実行します。

例)
x=2
DO
x=x*x
LOOP WHILE x<40

例の(実行式)では変数xに2を代入しそれを二乗した値を改めてxに代入しています。
(評価式)では40未満であれば正となります。
したがって結果としては4,8,16,32,64まで繰り返し計算を行い、64が評価されて誤となりますので繰り返しを終了します。

文法2)
DOWHILE (評価式)
(実行式)
LOOP

先ほどとは違い先に評価を行いますのでループ内の(実行式)を実行しないこともありえます。

例)
x=2
DOWHILE x<40
x=x*x
LOOP

例の(実行式)では変数xに2を代入しそれを二乗した値を改めてxに代入しています。
(評価式)では40未満であれば正となります。
したがって結果としては4,8,16,32,64まで繰り返し計算を行い、64が評価されて誤となりますので繰り返しを終了します。

ページトップへ


繰り返しその3 DO・・・LOOP /UNTIL文

命令を条件が合うまで繰り返します。正しくなるまで繰り返しです。

文法1)
DO
(実行式)
LOOP UNTIL (評価式)

最低1回はループ内の(実行式)を実行します。

例)
x=2
DO
x=x*x
LOOP UNTIL x>40

例の(実行式)では変数xに2を代入しそれを二乗した値を改めてxに代入しています。
(評価式)では40以上であれば正となります。
したがって結果としては4,8,16,32,64まで繰り返し計算を行い、64が評価されて正となりますので繰り返しを終了します。

文法2)
DOUNTIL (評価式)
(実行式)
LOOP

先ほどとは違い先に評価を行いますのでループ内の(実行式)を実行しないこともありえます。

例)
x=2
DOUNTIL x>40
x=x*x
LOOP

例の(実行式)では変数xに2を代入しそれを二乗した値を改めてxに代入しています。
(評価式)では40以上であれば正となります。
したがって結果としては4,8,16,32,64まで繰り返し計算を行い、64が評価されて正となりますので繰り返しを終了します。

ページトップへ


別プログラム呼び出し CALL文 (コール、サブルーチン)

会社の中、家庭の中で作業の分担がそれぞれ分かれているようにプログラムの中でも、あるプログラムから別のプログラムを呼び出し作業をさせてその結果だけを受け取ることが できます。この機能は巷に出ているマニュアル本達では結構上級向けとして、説明があったり、なかったりしますが理屈さえわかってしまえば簡単ですし小さなプログラムを【部品】のごとく作って集めて大きなプログラム構成にする方法はおすすめできると思います。

文法)
CALL (サブルーチン名) (引数)

エクセルVBAはすべての1個のプログラムがサブルーチンという単位でまとまっておりすべてに名前を付けるのが規則なっています。それをCALL文とともに指示することで別のプログラムを、自プログラムとして動作させることができます。

(引数)は省略可能です。また複数ある場合は","(カンマ)で区切って並べます。

注意点は引き渡される値の並び順と並んでいる数を間違えてはいけないという点です。

計算結果がとんでもないことになるばかりでなくほとんどの場合エラーが出てプログラム自体が動きません。

例1)
SUB main_program()
r=5
h=10
CALL juryo r,h,w
END SUB


SUB juryo(x,h,w)
area=r*r*3.14
mass=area*h
w=mass*0.00789
END SUB

例1ではメインとなるプログラムで半径と高さを与えて副プログラムをコールすると副プログラムでは重量を計算しメインプログラムに戻ります。

CALL文で橋渡しされた引数の値をメインと副プログラムが共有しますので、メインのwには結果として6.19365を得ることになります。

また、(引数)の名前は順番さえ守れば同じものでなくてもかまいません。値を直接並べることも可能です。次の例をご覧ください。

例2)
SUB main_program()
CALL juryo 5,10,w
END SUB


SUB juryo(x,h,weight)
area=r*r*3.14
mass=area*h
weight=mass*0.00789
END SUB

例2の結果は例1と同じことになります。

いかがでしたか?”文法”なので面倒な部分が往々にしてありますが最低限これがわかればというもののをえりすぐってみました。

ページトップへ