5. VBA(for Excel)とフローチャート¶
ここでは、VBAとフローチャートの対応関係について書きます。ソースコードとフローチャートを順番に書くことで、VBAの処理の流れを明確にします。
Contents
5.1. goto文¶
goto文はスパゲッティープログラムの元として嫌われることが多いので、多重ループから脱出するなどの特定の場面でのみ利用するのがよい。
gotoの構文
GoTo ラベル
ラベル: 'GoTo文のジャンプ先。
ラベルの後ろには : (コロン) を指定し、ラベルだけを単独で 1 行に入力する
vba_goto.bas
Sub main
GoTo B
A:
'処理しない
MsgBox "01"
B:
'処理する
MsgBox "02"
GoTo D
C:
'処理しない
MsgBox "03"
D:
End Sub
goto文例のフローチャート
5.2. 三項の条件演算子¶
三項の条件演算子の構文
IIf(条件, 式1, 式2)
三項の条件演算子の例
vba_conditional_op.bas
Sub main
Dim sum As Integer
sum = 10
Dim str As String
str = IIf(sum >= 60, "合格", "不合格")
MsgBox str
End Sub
三項の条件演算子フローチャート
5.3. if...else文¶
if..elseの構文
If 条件式1 then
命令文1
ElseIf 条件式2 then
命令文2;
Else
命令文3;
End If
if..elseのフローチャート
if..elseの例
vba_if_else.bas
Sub main
Dim age As Integer
age = 16
Dim result As String
result = ""
If age >= 70 Then
result = "心の欲する所に従って矩を踰えず"
ElseIf age >= 60 Then
result = "耳順う"
ElseIf age >= 50 Then
result = "天命を知る"
ElseIf age >= 40 Then
result = "惑わず"
ElseIf age >= 30 Then
result = "立つ"
ElseIf age >= 15 Then
result = "学に志す"
Else
result = "無し"
End If
MsgBox result '=> 学に志す
End Sub
if..else文例のフローチャート
5.4. switch文¶
switch文の構文
Select Case 式
Case 値1
命令文1
Case 値2
命令文2
Case Else
命令文3
End Select
switch文のフローチャート
switch文の例
js_switch.html
Sub main
Dim month As Integer
month = 2
Dim result As String
result = ""
Select Case month
Case 1
result = "January"
Case 2
result = "February"
Case 3
result = "March"
Case 4
result = "April"
Case 5
result = "May"
Case 6
result = "June"
Case 7
result = "July"
Case 8
result = "August"
Case 9
result = "September"
Case 10
result = "October"
Case 11
result = "November"
Case 12
result = "December"
Case Else
Debug.Assert False
End Select
MsgBox result '=> February
End Sub
switch文例のフローチャート
5.5. for文¶
for文の構文
For カウンタ変数 = 初期値 To 繰り返し回数 Step カウンタ変数増加数
命令文;
Next
for文のフローチャート
1~10の合計を求めるfor文の例
vba_for.bas
Sub main
Dim sum As Integer
sum = 0
Dim i As Integer
For i = 1 To 10
sum = sum + i
Next
MsgBox sum '=>55
End Sub
for文例のフローチャート
5.6. for-each文¶
for-eachのループ文の説明
for each文の構文
For Each 変数 In グループ
文
Next
Sub main()
Dim nums() As Variant
nums = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Dim sum As Integer
sum = 0
Dim num As Variant
For Each num In nums
sum = sum + num
Next
MsgBox sum '=>55
End Sub
for_each文例のフローチャート
5.7. while文¶
VBAのwhile文には、Do While...Loop文とDo Until...Loopの二つがある。
Whileの否定がUntilとなっており、継続条件式が反対の関係である。
while文の構文
Do While 継続条件式
命令文
Loop
Do Until not継続条件式
命令文
Loop
while文のフローチャート
1~10の合計を求める。while文の例
vba_while.bas
'(1) While
Sub main_while
Dim i As Integer
i = 1
Dim sum As Integer
sum = 0
Do While i <= 10
sum = sum + i
i = i + 1
Loop
MsgBox sum '=>55
End Sub
'(2) Until
Sub main_until
Dim i As Integer
i = 1
Dim sum As Integer
sum = 0
Do Until Not (i <= 10)
sum = sum + i
i = i + 1
Loop
MsgBox sum '=>55
End Sub
while文例のフローチャート
5.8. do..while文¶
do-while文の構文
VBAのdo..while文には、Do...Loop While文とDo...Loop Untilの二つがある。
Whileの否定がUntilとなっており、継続条件式が反対の関係である。
'(1) While
Do
命令文
Loop While 継続条件式
'※継続条件式:繰り返しを継続するする条件
'(2) Until
Do
命令文
Loop Until not継続条件式
'※not継続条件式:繰り返しを継続しない条件。
1~10の合計を求める。do-while文の例
vba_do_while.bas
'(1) Do ... Loop While
Sub main_while
Dim i As Integer
i = 1
Dim sum As Integer
sum = 0
Do
sum = sum + i
i = i + 1
Loop While i <= 10
MsgBox sum '=>55
End Sub
'(2) Do ... Loop Until
Sub main_until
Dim i As Integer
i = 1
Dim sum As Integer
sum = 0
Do
sum = sum + i
i = i + 1
Loop Until Not(i <= 10)
MsgBox sum '=>55
End Sub
do-while文のフローチャート
5.9. continue文¶
VBAにはcontinue文はありません。
GoTo文を利用して類似の処理が書けます。
なお、continue文はJavaやC言語などにある処理です。
※参考:Javaの continue文への参照
continueの構文
'continue文はないので下記のように書く
'GoTo文を使う
For カウンタ変数 = 初期値 To 繰り返し回数
処理
If 条件式 GoTo CONTINUE_LABEL
処理
CONTINUE_LABEL:
Next
vba_for_continue.bas
Sub main
Dim sum As Integer
sum = 0
Dim i As Integer
For i = 1 To 10 Step 1
If i = 3 Then
GoTo CONTINUE_LABLE
End If
sum = sum + i
CONTINUE_LABLE:
Next
MsgBox sum '=>52
End Sub
continue文例のフローチャート
5.10. break文¶
breakの構文
VBAでは「break」の代わりに、「Exit For」、「Exit Do」を使う。
break構文はFor、While文の繰り返し処理の途中で、繰り返し処理から抜け出す時に使う。
※Java、C言語などでは「break」というスペルを使う。Javaの break文への参照
For カウンタ変数 = 初期値 To 繰り返し回数 Step カウンタ変数増加数
命令文
Exit For
Next
Do While 条件式
命令文
Exit Do
Loop
vba_for_break.bas
Sub main
Dim sum As Integer
sum = 0
Dim i As Integer
For i = 1 To 10 Step 1
sum = sum + i
If sum >= 30 Then
Exit For 'ループを脱出する。
End If
Next
MsgBox sum '=>36
End Sub
break文例のフローチャート
5.11. ラベル付きcontinue文¶
VBAにはラベル付きcontinue文はないためGoTo文を利用して類似の処理を書きます。
なお、ラベル付きcontinue文はJavaにある処理で、主に多重ループを抜ける処理をスマートに書くために使います。
※参考:Javaの ラベル付きcontinue文への参照
ラベル付きcontinue文の例
vba_for_double_continue.bas
Sub main
Dim sum As Integer
sum = 0
Dim i As Integer
For i = 1 To 10 Step 1
Dim j As Integer
For j=1 To 10 Step 1
If i = 3 Then
GoTo CONTINUE_LABEL
End If
sum = sum + i * j
Next
CONTINUE_LABEL:
Next
MsgBox sum '=>2860
End Sub
ラベル付きcontinue文例のフローチャート
5.12. ラベル付きbreak文¶
ラベル付きのものは、主に多重ループを抜ける処理をスマートの書くために使います。
ラベル付きbreak文の例
vba_for_double_break.bas
Sub main
Dim sum As Integer
sum = 0
Dim i As Integer
For i = 1 To 10 Step 1
Dim j As Integer
For j=1 To 10 Step 1
sum = sum + i * j
If sum >= 15 Then
GoTo BREAK_LABEL '多重ループを抜けるため、BREAK_LABELへジャンプする。
End If
Next
Next
BREAK_LABEL:
MsgBox sum '=>15
End Sub
ラベル付きbreak文例のフローチャート