For文

VB6/VBAのfor文はif文と同様に多用します。

基本的なfor分を掲載します。配列やCollectionについては、他の言語と記憶が混ざったりして間違ったりする事があります。

For文を途中で処理を飛ばすContinueは、VB6では存在しない為、GOTOまたはIF文で通らないようにしています。GOTOは使用不可という業務的な規約がある場合もある為、私はIF文で回避しています。

  • for文(単純)
Dim i As Integer
Dim iLen As Integer
Dim strTest As String

'1~100まで繰り返し(ループ)
For i = 1 To 100
Debug.Print i

'iが50の場合はループを抜ける
If i = 50 Then Exit For
Next 

'100~1まで繰り返し(ループ)
For i = 100 To 1 Step -1
Debug.Print i

'iが50の場合はループを抜ける
If i = 50 Then Exit For
Next 

strTest = "TEST"

'文字列の文字数分、繰り返し(ループ)
For i = 1 To Len(strTest)
'対象文字を出力
Debug.Print Mid(strTest, i, 1)
Next 

'文字列をUnicode⇒コードページ変換
iLen = LenB(StrConv(strTest, vbFromUnicode))

'文字列のバイト数(ANSI)分、繰り返し(ループ)
For i = 1 To iLen
'対象バイト位置から1バイト分を出力
Debug.Print GetMidVal(strTest, i, 1)
Next

'バイト文字列の部分切り取り関数
Public Function GetMidVal(ByVal stTarget As String, ByVal iStr As Integer, Optional ByVal iLen As Integer) As String

'指定されたバイト数分、文字列がある場合は部分文字列、以外は指定バイト数から全てを取得
If LenB(StrConv(strTest, vbFromUnicode)) <= (iStr + iLen - 1) Then
MidByte = StrConv(MidB$(StrConv(stTarget, vbFromUnicode), iStr, iLen), vbUnicode)
Else
MidByte = StrConv(MidB$(StrConv(stTarget, vbFromUnicode), iStr), vbUnicode)
End If
End Function

※文字列をバイト数で繰り返ししたい場合は、一旦、Unicodeから変換して、いわゆる半角=1バイト,全角=2バイトとしてカウントされたものを取得し、その件数分、繰り返しています。バイト数による部分文字列切り取りは、上記(GetMidVal)のように別関数を作成してMidを行っています。

  • for分(配列)
Dim i As Integer
Dim strList(1) As String

'対象添え字に値を編集
strList(0) = "AAA"
strList(1) = "BBB"

'要素情報を維持した状態で、配列最大要素数を変更する場合
ReDim Preserve strList(9)

'配列の要素数(10回)分、繰り返し(ループ)
For i = 0 To UBound(strList)
'対象文字を出力
Debug.Print strList(i)
Next
  • for分(Collection)
Dim i As Integer
Dim strVal As String
Dim colTest As Collection

'インスタンス化
Set colTest = New Collection

'要素追加
Call colTest.Add("KEY", "VALUE")

'コレクションの要素数分、繰り返し(ループ)
i = 0
For Each strVal In colTest
i = i + 1
'対象文字を出力
Debug.Print i & ":" & strVal
Next