ヘッダー
Visual Basic サンプル集
 

For Each ~ Next による繰り返し

2022/9/25

→ C# のサンプルに切り替える → Python のサンプルに切り替える

 

Listの要素の繰り返し

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim items As New List(Of String)({"Apple", "Banana", "Cat", "Dog"})

'型推論により item は String型になります。
For Each item In items
    Debug.WriteLine(item)
Next

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

Apple
Banana
Cat
Dog

 

 

Dictionaryの要素の繰り返し

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim items As New Dictionary(Of String, String) From 
        {{"A", "Apple"}, {"B","Banana"}, {"C","Cat"}, {"D","Dog"}}

'型推論により item は KeyValuePair型になります。
For Each item In items
    Debug.WriteLine($"{item.Key}={item.Value}")
    'Debug.WriteLine(item.Key & "=" & item.Value) '←VB2013以前の場合
Next

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

A=Apple
B=Banana
C=Cat
D=Dog

 

 

配列の要素の繰り返し

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim items() As String = {"Apple", "Banana", "Cat", "Dog"}

'型推論により item は String型になります。
For Each item In items
    Debug.WriteLine(item)
Next

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

Apple
Banana
Cat
Dog

 

 

文字列内の文字を列挙する

VB2019対応 Visual Studio 2022

Dim value As String = "🗿モアイ"

'型推論により letter は Rune型になります。
For Each letter In value.EnumerateRunes
    Debug.WriteLine(letter)
Next

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

🗿


 

 

C:\Windows にあるファイルを列挙

VB2017対応 VB2019対応 Visual Studio 2022

'型推論により fileName は String型になります。
For Each fileName In IO.Directory.EnumerateFiles("C:\Windows")
    Debug.WriteLine(fileName)
Next

Debug.WriteLineが表示される場所

 

 

C:\Windows にあるファイルとサイズを列挙

VB2017対応 VB2019対応 Visual Studio 2022

Dim winFolder As New IO.DirectoryInfo("C:\Windows")

'型推論により file は FileInfo型になります。
For Each file In winFolder.EnumerateFiles
    Debug.WriteLine($"{file.Name} {file.Length / 1024:#,0} KB")
Next

Debug.WriteLineが表示される場所

 

 

環境変数の列挙

VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

'型推論だと env が Objectg型になり不便なので、自分で明示的に型を指定します。
For Each env As DictionaryEntry In Environment.GetEnvironmentVariables()
    Debug.WriteLine($"{env.Key} = {env.Value}")
    'Debug.WriteLine(env.Key.ToString & " = " & env.Value.ToString) '←VB2013以前の場合
Next

Debug.WriteLineが表示される場所

 

 

繰り返し回数を取得する

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim items As New List(Of String)({"Apple", "Banana", "Cat", "Dog"})
Dim counter As Integer

'型推論により item は String型になります。
For Each item In items
    counter += 1
    Debug.WriteLine($"{counter}個目 = {item}")
    'Debug.WriteLine(counter & "個目 = " & item) '←VB2013以前の場合
Next

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

1個目 = Apple
2個目 = Banana
3個目 = Cat
4個目 = Dog

 

 

途中でループから抜け出す (Exit For)

この例は本来4回繰り返す指定になっていますが、If 文で条件判断して"Cat"の周で抜けます。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim items As New List(Of String)({"Apple", "Banana", "Cat", "Dog"})

'型推論により item は String型になります。
For Each item In items
    Debug.WriteLine(item)
    If item = "Cat" Then
        Exit For
    End If
Next

Debug.WriteLine("終了")

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

Apple
Banana
Cat
終了

 

 

ループがすべて完了したか確認する (たとえば、Exit Forしていないかどうか)

この例では 変数 item が "Eagle" の場合 Exit For します。ループの処理がすべて終わった後に Exit For して終わったのか、Exit For しないで終わったのかメッセージを出力します。 このまま実行すると item が "Eagle" になることはないので Exit For は発生しないで終了します。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim items As New List(Of String)({"Apple", "Banana", "Cat", "Dog"})
Dim isExit As Boolean = False

'型推論により item は String型になります。
For Each item In items
    Debug.WriteLine(item)
    If item = "Eagle" Then '←ここを item = "Banana" などに変えると、最後のメッセージが出力されなくなります。
        isExit = True
        Exit For
    End If
Next

If Not isExit Then
    Debug.WriteLine("Exit Forしないでループを終了しました。") '←これが出力されます。
End If

Debug.WriteLineが表示される場所

メモ:ループが完了したかを検出する特別な機能はありません。

 

 

その周を中断し、次の周を開始する (Continue For)

If 文で条件判断して"Banana" と "Cat" であれば処理を中断して次の周を開始します。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim items As New List(Of String)({"Apple", "Banana", "Cat", "Dog"})

'型推論により item は String型になります。
For Each item In items
    Debug.WriteLine(item & "開始")
    If item = "Banana" OrElse item = "Cat" Then
        Continue For
    End If
    Debug.WriteLine(item & "終了")
Next

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

Apple開始
Apple終了
Banana開始
Cat開始
Dog開始
Dog終了

 

 

2重ループで九九の表を作成する

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

For Each x In Enumerable.Range(1, 9)
    For Each y In Enumerable.Range(1, 9)
        Debug.Write(vbTab & x * y)
    Next
    Debug.WriteLine("")
Next

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

 

 

列挙型を繰り返す

この例では DayOfWeek 列挙型 のメンバーを列挙します。

VB2019対応 Visual Studio 2022

For Each value In [Enum].GetValues(Of DayOfWeek)
    Dim name As String = [Enum].GetName(value)
    Debug.WriteLine($"{CInt(value)}:{name}")
Next

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

0:Sunday
1:Monday
2:Tuesday
3:Wednesday
4:Thursday
5:Friday
6:Saturday

 

 

タプルの要素の繰り返し

VB2019対応 Visual Studio 2022

Dim items = ("Apple", "Banana", "Cat", "Dog")

Dim sugarTuple As Runtime.CompilerServices.ITuple = items

'型推論により index は Integer型になります。
For Each index In Enumerable.Range(0, sugarTuple.Length)
    Debug.WriteLine(sugarTuple(index))
Next

Debug.WriteLineが表示される場所

メモ:タプルは繰り返されることを想定したオブジェクトではありません。

実行すると下記の通り出力されます。

Apple
Banana
Cat
Dog

 

 

 


VB.NET2003対応 VB2005対応 VB.NET 2003 と VB2005 には型推論機能がないので、For Each item In ... のように書く代わりに For Each item As String In ... などのように型を明示するか、変数 item を For Each の前で宣言しておく必要があります。これをやればこの記事で紹介しているサンプルの多くは使用できます。

VB.NET2002対応 VB.NET (2002) では For Each を使って変数を宣言することができないので For Each item In ... のようなプログラムがあれば、For  Each の前で変数 item を Dim item As String のように宣言しておく必要があります。これをやればこの記事で紹介している多くのサンプルは使用できます。

VB6対応 VB6では 上述の VB.NET 2002 と同じようにすれば コレクションに対して For Each を使用することができます。