「条件分岐やループはどうやるの?」の編集履歴(バックアップ)一覧に戻る

条件分岐やループはどうやるの? - (2009/12/26 (土) 22:59:36) のソース

条件分岐は、If文を使う。

 If A>1 Then
     B=1
 Else
     B=2
 End If

のようにして、上の場合だとAが1より大きければBに1を、さもなくばBに2を代入する。
Else節は省略できる。

 If A>1 Then
     B=1
 End If

この場合、Aが1以下なら何も起こらない。

1行で書くこともできる。

 If A>1 Then B=1 Else B=2

これは勿論Else節を省略できて

 If A>1 Then B=1

のように使うこともできる。

 If A>1 Then If C>1 Then B=1 Else B=2

のように書くと、Elseは未完了の最後尾のIf文に引っ張られて、次のように解釈される。

 If A>1 Then (If C>1 Then B=1 Else B=2)

次のように解釈させたい場合、素直に複数行で書くのが手っ取り早い。

 If A>1 Then (If C>1 Then B=1) Else B=2
↓
 If A>1 Then
     If C>1 Then B=1
 Else
     B=2
 End If

ループは、Do文、While文、For文の他、Goto文を用いることができる。

 Do
     'something・・・
     ・
     ・
     ・
 Loop Until A>1

と書くと、A>1になったらループが終了する。

 Do
     'something・・・
     ・
     ・
     ・
 Loop While A>1

と書くと、A>1の間、ループが続けられる。
UntilやWhileは省略できて、

 Do
     'something・・・
     ・
     ・
     ・
 Loop

と書くこともできる。こうすると無限ループになり、必要ならExit Doを用いてループから抜け出す。

 Do
     'something・・・
     ・
     ・
     ・
     If A>1 Then Exit Do
 Loop

Continueを使うと、Do文の先頭に戻る。
 Do
     
     'something・・・
     ・
     ・
     ・
     If B>1 Then Continue
     'something・・・
     ・
     ・
     ・
 Loop Until A>1

どちらにせよ、Doは基本的に1回以上何かをやってから判定する。

 While A>1
     'something・・・
     ・
     ・
     ・
 Wend

と書くと、A>1ならループを続行する。
途中で抜けたいときにはExit Whileを、先頭に戻りたいときにはContinueを用いる。
Whileは基本的に判定してから何かを行う。

 For I=1 To 10
     'something・・・
     ・
     ・
     ・
 Next I

と書くと、何かを10回繰り返す。繰り返す間、Iの値は1づつ増加し続ける。
増加する値を変更したいときには、Stepを付加して

 For I=10 To 1 Step -1
     'something・・・
     ・
     ・
     ・
 Next I

のように書く。上の場合、Iが10から1まで-1ずつ増えて(1ずつ減って)、10回ループした後に終了する。
途中で抜けたいときにはExit Forを、先頭に戻りたいときにはContinueを用いる。
変数Iはあらかじめ宣言しておく必要がある。

Gotoは最も原始的な方法で、ラベルへジャンプする。

 *A
     'something・・・
     ・
     ・
     ・
 Goto *A

ラベルはアスタリスク(*)で始める。

Gotoを使えば、基本的にどんな風に制御を移動する事も出来る為ある場面では便利だが、同時に使いすぎるとあとで読むのが非常に難しいプログラムになる。
また、関数の中から別の関数の中に飛ぶ事が出来るが、非常にややこしい事が起こる為やらないほうが良い。