While文

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で繰り返し処理するケースは、私はあまりないのですが、コレクションの要素を、処理の条件によって、追加、削除したりするような動的な処理を行う場合には使っています。