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 テクニック編資料