Visual Basic サンプル集 |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
For Each ~ Next による繰り返し
2022/9/25
→ C# のサンプルに切り替える → Python のサンプルに切り替える
目次
Listの要素の繰り返し
Dim items As New List(Of String)({"Apple", "Banana", "Cat", "Dog"})
'型推論により item は String型になります。
For Each item In items
Debug.WriteLine(item)
Next
実行すると下記の通り出力されます。
Apple
Banana
Cat
Dog
Dictionaryの要素の繰り返し
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
実行すると下記の通り出力されます。
A=Apple
B=Banana
C=Cat
D=Dog
配列の要素の繰り返し
Dim items() As String = {"Apple", "Banana", "Cat", "Dog"}
'型推論により item は String型になります。
For Each item In items
Debug.WriteLine(item)
Next
実行すると下記の通り出力されます。
Apple
Banana
Cat
Dog
文字列内の文字を列挙する
Dim value As String = "🗿モアイ"
'型推論により letter は Rune型になります。
For Each letter In value.EnumerateRunes
Debug.WriteLine(letter)
Next
実行すると下記の通り出力されます。
🗿
モ
ア
イ
C:\Windows にあるファイルを列挙
'型推論により fileName は String型になります。
For Each fileName In IO.Directory.EnumerateFiles("C:\Windows")
Debug.WriteLine(fileName)
Next
C:\Windows にあるファイルとサイズを列挙
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
環境変数の列挙
'型推論だと 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
繰り返し回数を取得する
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
実行すると下記の通り出力されます。
1個目 = Apple
2個目 = Banana
3個目 = Cat
4個目 = Dog
途中でループから抜け出す (Exit For)
この例は本来4回繰り返す指定になっていますが、If 文で条件判断して"Cat"の周で抜けます。
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("終了")
実行すると下記の通り出力されます。
Apple
Banana
Cat
終了
ループがすべて完了したか確認する (たとえば、Exit Forしていないかどうか)
この例では 変数 item が "Eagle" の場合 Exit For します。ループの処理がすべて終わった後に Exit For して終わったのか、Exit For しないで終わったのかメッセージを出力します。 このまま実行すると item が "Eagle" になることはないので Exit For は発生しないで終了します。
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
メモ:ループが完了したかを検出する特別な機能はありません。
その周を中断し、次の周を開始する (Continue For)
If 文で条件判断して"Banana" と "Cat" であれば処理を中断して次の周を開始します。
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
実行すると下記の通り出力されます。
Apple開始
Apple終了
Banana開始
Cat開始
Dog開始
Dog終了
2重ループで九九の表を作成する
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
実行すると下記の通り出力されます。
列挙型を繰り返す
この例では DayOfWeek 列挙型 のメンバーを列挙します。
For Each value In [Enum].GetValues(Of DayOfWeek)
Dim name As String = [Enum].GetName(value)
Debug.WriteLine($"{CInt(value)}:{name}")
Next
実行すると下記の通り出力されます。
0:Sunday
1:Monday
2:Tuesday
3:Wednesday
4:Thursday
5:Friday
6:Saturday
タプルの要素の繰り返し
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
メモ:タプルは繰り返されることを想定したオブジェクトではありません。
実行すると下記の通り出力されます。
Apple
Banana
Cat
Dog
VB.NET 2003 と VB2005 には型推論機能がないので、For Each item In ... のように書く代わりに For Each
item As String In ... などのように型を明示するか、変数 item を For Each の前で宣言しておく必要があります。これをやればこの記事で紹介しているサンプルの多くは使用できます。
VB.NET (2002) では For Each を使って変数を宣言することができないので For Each item In ...
のようなプログラムがあれば、For Each の前で変数 item を Dim item As String
のように宣言しておく必要があります。これをやればこの記事で紹介している多くのサンプルは使用できます。
VB6では 上述の VB.NET 2002 と同じようにすれば コレクションに対して For Each
を使用することができます。