SAK 図書館
VB 入門編5 - 制御構造、判定、判断、分岐、ループ、if、select case、for、do
■制御構造 ・通常プログラムは上から下に向かって順に実行される。 流れを分岐されたり、効率の良い繰り返しを行うために制御構造がある。 制御には、論理値 boolean 評価が多用される。 VB の True は -1 で、C 言語の TRUE は 1 と評価が異なるので注意する。 Windows API や C 言語 DLL を呼ばなければ、あまり気にすることもない。 True -1 False 0 ・実際の if では、-1 が真となり、それ以外は偽りとなる。 C 言語では、0 が偽りとなり、それ以外は真となる。 C 言語の if (a) {} と同じ構文を VB で実現する場合は、 if a <> false then とする必要がある。 これも VB の中だけなら、あまり気にすることはない。 ■if 文 (判断) ・条件評価によって、実行コードを分岐する。 elseif も使えるが、select case を使う方が見やすい。 1 行 if 構文もある。 dim a as long a = 100 if a = 100 then msgbox msgbox "真" if a = 100 then msgbox "真" end if if a = 100 then msgbox "真" else msgbox "偽" end if if a >= 50 and a <= 100 then msgbox "真" end if ・boolean 値の評価は、次のようにする。 dim b as boolean b = true if b then msgbox "真" else msgbox "偽" end if if b = false then msgbox "真" else msgbox "偽" end if ・if を使ったループは、次のようにする。 但し、通常はループ構造を使用して、if でのループは組まない。 ラベルや goto も使わないのが常識である。 dim i as long cls i = 1 :loop if i <= 10 then print i i = i + 1 goto loop end if ・文字列の条件評価構文も基本的に数値評価と同じである。 dim s as string s = "abc" if s = abc" then msgbox "真" end if if s > "aaa" then msgbox "真" end if ■select case (多重分岐) ・条件評価によって、実行コードを多重分岐する。 C 言語や JAVA のように break なしで次の case コードを実行するような 制御はできない。 dim a as long a = 100 select case a case 100 msgbox "分岐1" case 200 msgbox "分岐2" case else msgbox "分岐その他" end select select case a case 100, 200 msgbox "分岐1" case 300, 400 msgbox "分岐2" case else msgbox "分岐その他" end select ・複雑な条件評価は、次のようにする。 dim a as long a = 100 select case true case a >= 50 and a < 100 msgbox "分岐1" case a >= 100 and a < 150 msgbox "分岐2" case else msgbox "分岐その他" end select ■for (ループ) ・特定回数繰り返しコードを実行する。 for ループ脱出には exit for を使用することができる。 次の例では、10 回ループし、1 〜 10 の数値を加算する。 dim a as long dim i as long a = 0 for i = 1 to 10 a = a + i next cls print a ・増分は、step で指定できる。 この例では、1, 3, 5, 7, 9 が加算される。 dim a as long dim i as long a = 0 for i = 1 to 10 step 2 a = a + i next cls print a ・マイナス増分は、step - で指定できる。 この例では、10 〜 1 を加算する。 dim a as long dim i as long a = 0 for i = 10 to 1 step -1 a = a + i next cls print a ・for ループを使用した配列サーチは、次のようにする。 dim dtkey(9) as string dim dttxt(9) as string dim dtmax as long dim shkey as string dim i as long dtmax = -1 dtmax = dtmax + 1 : dtkey(dtmax) = "a001" : dttxt(dtmax) = "あいうえお" dtmax = dtmax + 1 : dtkey(dtmax) = "b002" : dttxt(dtmax) = "かきくけこ" dtmax = dtmax + 1 : dtkey(dtmax) = "c003" : dttxt(dtmax) = "さしすせそ" dtmax = dtmax + 1 : dtkey(dtmax) = "d004" : dttxt(dtmax) = "たちつてと" dtmax = dtmax + 1 : dtkey(dtmax) = "e005" : dttxt(dtmax) = "なにぬねの" shkey = "d004" for i = 0 to dtmax if dtkey(i) = shkey then exit for next if i > dtmax then msgbox "見つかりませんでした。" else msgbox dtkey(i) & " - " & dttxt(i) & " を見つけました。" end if ■do (ループ) ・特定評価条件で繰り返しコードを実行する。 do ループ脱出には exit do を使用することができる。 until 条件は終了条件であり、while 条件にするとループ条件になる。 次の例は、文字列変数 s の "ab" を場所と切り出した文字を表示する。 評価式は目的に応じて、loop の後に書くこともできる。 dim s as string dim a as string dim i as long dim j as long s = "abcdabefabgh" a = "ab" cls j = len(a) i = 1 - j do until i = 0 i = instr(i + j, s, a) if i > 0 then print i & " " & mid(s, i, j) loop ・制御構造の詳細は、次の資料を参照のこと。 VB 基礎編 (その三) 制御構造(判定、ループ) ■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料