VB6/VBAのwhile文も配列やコレクションの書き方を忘れる事がありますので、記載します。
- while文(Do While/Do Until)
// 変数定義
Dim i As Integer
i = 0
'繰り返し(10回)処理を行う
Do While i < 10
'カウントアップする
i = i + 1
Loop
'繰り返し(10回)処理を行う
Do Until i >= 10
'カウントアップする
i = i + 1
'特定の条件でループを抜ける場合
If i = 100 Then
Exit Do
End If
Loop
※私はWhileとUntilの違いは、While=~の間処理を行う。Until=~になるまで処理を行う。というように覚えています。先に、While/Untilを持ってきた場合は1回目の処理を行う前に判定される為、1回も処理をしない場合があります。
- while文(Loop While/Loop Until)
// 変数定義
Dim i As Integer
i = 0
'繰り返し(10回)処理を行う
Do
'特定の条件でループを抜ける場合
If i = 100 Then
Exit Do
End If
'カウントアップする
i = i + 1
Loop While i < 10
'繰り返し(10回)処理を行う
Do
'カウントアップする
i = i + 1
Loop Until i >= 10
後にWhile/Untilを持ってきた場合は1回目は判定がない為、必ず処理されます。私はソースを検証する際にもわかりにくいですし、考え方も難しくなる為、先に持ってくる方を使う事がほとんどですが、処理そた後に、特定の条件の時だけ、trueにしそれ以外は処理を継続するような場合には、後ろに持ってくる事があります。
- while文(配列)
Dim i As Integer
Dim strList(1) As String
'対象添え字に値を編集
strList(0) = "AAA"
strList(1) = "BBB"
i = LBound(strList)
Do While i <= UBound(strList)
MsgBox strList(i)
'カウントアップする
i = i + 1
Loop
※上記ではLBound(最小要素数の取得)を使いましたが、実業務では添え字の最初はi = 0のように固定値としています。汎用的ではないですが、逆に仕様を明確にソースからわかるようにし、仕様以外で思わぬ動作しないようにバグを減らす為にしています。
- while文(コレクション)
Dim i As Integer
Dim iMax As Integer
Dim strVal As String
Dim colTest As Collection
'インスタンス化
Set colTest = New Collection
'要素追加
Call colTest.Add("KEY", "VALUE")
i = 0
iMax = colTest.Count
Do While i < iMax
'カウントアップする
i = i + 1
MsgBox colTest.item(i)
Loop
※Collection(コレクション)をWhileで繰り返し処理するケースは、私はあまりないのですが、コレクションの要素を、処理の条件によって、追加、削除したりするような動的な処理を行う場合には使っています。