VB.NETのFor Eachループを完全マスター!初心者でもわかるコレクション処理の基本
生徒
「先生、VB.NETでたくさんのデータをまとめて処理する方法ってありますか?」
先生
「いい質問ですね。VB.NETでは、For Eachループを使うと、コレクションや配列の中身を1つずつ取り出して処理できます。」
生徒
「それって、Forループと何が違うんですか?」
先生
「Forループは回数を指定して繰り返すのに対して、For Eachループは“要素”そのものを順番に処理します。では、詳しく見ていきましょう!」
1. For Eachループとは?
VB.NETのFor Eachループは、配列やリスト、コレクションと呼ばれる「複数のデータがまとまった入れ物」の中身を、先頭から順番に1つずつ取り出して処理するための構文です。 英語の“Each”は「それぞれ」「一つ一つ」という意味を持っており、その言葉どおり、すべての要素に同じ処理を行う場面で活躍します。 VB.NETでは繰り返し処理が多く登場しますが、For Eachループは特に読みやすく、初心者でも理解しやすいのが特徴です。
例えば、10人分の名前が入ったリストがある場合、For Eachを使うことで「最初の人から最後の人まで」を意識せずに処理できます。
配列の長さを数えたり、番号を指定したりする必要がないため、プログラミング未経験者でも直感的に書けます。
そのため、VB.NETの入門段階では、最初に覚えておきたい繰り返し構文のひとつと言えるでしょう。
Dim names() As String = {"山田", "田中", "佐藤"}
For Each name In names
Console.WriteLine(name)
Next
このサンプルでは、名前が入った配列から1つずつ名前を取り出して画面に表示しています。 「配列の中身を順番に処理したい」と考えたときに、For Eachループを使うと、無理なく自然な形でプログラムを書くことができます。
2. For Eachループの基本構文
ここでは、VB.NETのFor Eachループの基本的な書き方を確認していきましょう。 For Eachループは、「コレクションの中身を順番に取り出して処理する」という考え方がそのままコードに表れるため、プログラミング未経験者でも理解しやすい構文です。 難しい記号や計算がほとんど出てこない点も、初心者にとって安心できるポイントです。
For Each 変数名 In コレクション名
' 繰り返したい処理
Next
「変数名」には、コレクションの中から取り出されたデータが1つずつ自動的に入ります。 「コレクション名」には、配列やリストなど、複数のデータがまとめて入っているものを指定します。 この構文を読むと、「コレクションの中のそれぞれの要素について、同じ処理を行う」という意味になります。
Dim numbers() As Integer = {1, 2, 3}
For Each num In numbers
Console.WriteLine(num)
Next
このサンプルでは、数値が入った配列から1つずつ数字を取り出して表示しています。 配列の個数を数えたり、何番目かを意識したりする必要はありません。 For Eachループの基本構文を理解することで、VB.NETの繰り返し処理をスムーズに書けるようになります。
3. 配列を使ったFor Eachループの例
次は、VB.NETでよく使われる配列を使ったFor Eachループの例を見ていきましょう。 配列とは、同じ種類のデータを順番に並べてまとめて管理できる仕組みで、初心者が最初に触れることの多いデータ構造です。 「複数の値をひとまとめにして扱いたい」ときに、とても便利な存在です。
Dim fruits() As String = {"りんご", "バナナ", "みかん"}
For Each fruit In fruits
Console.WriteLine(fruit)
Next
りんご
バナナ
みかん
このサンプルでは、果物の名前が入った配列を用意し、For Eachループを使って先頭から順番に表示しています。 配列の中に何個データが入っているかを事前に考える必要はなく、すべての要素が自動的に処理されます。 プログラミング未経験者でも「配列の中身を一つずつ見ていく」という感覚で理解できるため、 For Eachループと配列の組み合わせは、VB.NET学習の初期段階でぜひ慣れておきたい基本パターンです。
4. コレクション(List)を使ったFor Eachの使い方
VB.NETでは、配列に加えてリスト(List)という、より柔軟にデータを扱えるコレクションが用意されています。 リストは、あとからデータを追加したり削除したりできる点が特徴で、実際のアプリケーション開発では非常によく使われます。 「データの数が途中で変わるかもしれない」という場面では、配列よりもリストの方が扱いやすくなります。
Dim numbers As New List(Of Integer) From {10, 20, 30, 40}
For Each num In numbers
Console.WriteLine(num * 2)
Next
20
40
60
80
この例では、数値が入ったリストから1つずつ値を取り出し、2倍した結果を表示しています。 For Eachループを使うことで、リストの要素数を意識することなく、すべてのデータを順番に処理できます。 初心者のうちは「配列とほぼ同じ感覚で使える」と理解しておくと、VB.NETでのコレクション操作がぐっと身近になります。
5. For EachループとForループの違い
For EachループとForループは、どちらも繰り返し処理を行うための構文ですが、考え方と使いどころが少し異なります。
For Eachループは「配列やリストの中身を先頭から順番にすべて処理したい」ときに向いており、
データの個数や位置を意識せずに書ける点が特徴です。
一方でForループは、「何回繰り返すか」や「何番目のデータか」を自分で指定したい場合に使われます。
' For文の例
For i As Integer = 0 To fruits.Length - 1
Console.WriteLine(fruits(i))
Next
このForループでは、iという番号を使って配列の要素を1つずつ取り出しています。
何番目のデータを扱っているかが分かりやすい反面、配列の長さを間違えるとエラーにつながることもあります。
その点、For Eachループは「中に入っている要素すべてを処理する」ことに専念できるため、
初心者にはFor Eachループの方が直感的で書きやすいケースが多いでしょう。
処理内容に応じて、2つのループを使い分けることが大切です。
6. For Eachループの中で条件を使う
実際のプログラムでは、「特定の条件に合うデータだけ処理したい」という場面が多くあります。そのときは、If文を組み合わせることで柔軟な処理ができます。
Dim numbers As New List(Of Integer) From {1, 2, 3, 4, 5, 6}
For Each n In numbers
If n Mod 2 = 0 Then '偶数なら
Console.WriteLine(n & "は偶数です")
End If
Next
2は偶数です
4は偶数です
6は偶数です
このように、For Eachの中で条件分岐を行うことで、特定の要素だけを選んで処理できます。プログラムの自由度が一気に広がります。
7. For Eachループの中でインデックスを扱う方法
基本的にFor Eachではインデックスを使いませんが、「今どの位置のデータを処理しているか」を知りたいときもあります。その場合は、カウンター変数を自分で用意します。
Dim names As String() = {"山田", "田中", "佐藤"}
Dim index As Integer = 0
For Each name In names
Console.WriteLine(index & "番目:" & name)
index += 1
Next
0番目:山田
1番目:田中
2番目:佐藤
このようにすれば、配列の位置情報も表示することができます。For Eachを使いながらも、必要なときには柔軟に対応できます。
8. For Eachループで文字列を扱う
実は、文字列も1文字ずつのコレクションとして扱えます。つまり、For Eachを使って文字単位の処理もできるのです。
Dim word As String = "VB.NET"
For Each ch As Char In word
Console.WriteLine(ch)
Next
V
B
.
N
E
T
このように、文字列の中の1文字ずつを順番に取り出して処理できます。文字列操作の基礎にもなるので、覚えておくととても便利です。
9. For Eachループのメリットと注意点
For Eachループは非常に便利ですが、いくつか注意点もあります。例えば、For Eachの中でコレクションの要素を削除したり追加したりするのは基本的に避けましょう。処理中にコレクションの中身が変わると、エラーや予期しない動作を起こすことがあります。
安全に扱うためには、ループの外で削除や追加を行うようにしましょう。これはVB.NETのプログラム全体に共通する大切な考え方です。
まとめ
For Eachループで身につくVB.NETの基本力
ここまでVB.NETのFor Eachループについて学んできましたが、For Eachは初心者が最初につまずきやすい「繰り返し処理」を、とても直感的に理解できる構文です。 配列やリスト、コレクションといった複数のデータをまとめて扱う場面は、VB.NETのプログラム開発では必ず登場します。 For Eachループを使えば、要素の数を意識せずに、1つずつ順番に処理できるため、コードが読みやすく、ミスも減らすことができます。 特にVB.NET初心者にとっては、「何回繰り返すか」よりも「何を処理するか」に集中できる点が大きなメリットです。
配列・リスト・文字列まで幅広く使える
記事の中では、文字列配列、数値のList、さらには文字列そのものをコレクションとして扱う方法まで紹介しました。 これにより、VB.NETのFor Eachループは単なる配列処理だけでなく、実務でよく使われるリスト操作や文字列処理にも応用できることが分かります。 例えば、ユーザー名の一覧を表示したり、数値データをまとめて計算したり、文字列を1文字ずつチェックする処理など、実際のアプリケーション開発でも頻繁に使われます。 For Eachループを正しく理解することは、VB.NETでのコレクション処理の基礎を固めることにつながります。
条件分岐と組み合わせることで実用性が向上
For Eachループ単体でも便利ですが、If文と組み合わせることで、より実践的なプログラムになります。 偶数だけを処理したり、特定の条件に合うデータのみを表示したりすることで、現実的な処理が可能になります。 VB.NETではFor Eachの中にIf文を書くことが自然な流れなので、読みやすさを保ったまま条件分岐を実装できます。 この書き方に慣れることで、後々データベース処理やファイル処理を学ぶ際にも理解がスムーズになります。
インデックスが必要な場合の考え方
For Eachループはインデックスを使わないのが基本ですが、位置情報が必要な場合にはカウンター変数を用意する方法があることも学びました。 この考え方を知っておくことで、「For Eachでは何もできない」と感じる場面を減らすことができます。 VB.NETのForループとFor Eachループの違いを理解し、場面に応じて使い分けることが、読みやすく保守しやすいコードを書くコツです。
まとめとしてのサンプルプログラム
Dim scores As New List(Of Integer) From {70, 85, 90, 60}
For Each score In scores
If score >= 80 Then
Console.WriteLine(score & "点は合格です")
End If
Next
このサンプルでは、VB.NETのFor EachループとIf文を組み合わせて、条件に合うデータだけを処理しています。 配列やリストを使った繰り返し処理の基本として、とても実践的な形です。 For Eachループを使いこなせるようになると、VB.NETでのプログラミングが一気に楽になります。
生徒「For Eachループって、思っていたよりも簡単で使いやすいですね。配列の数を数えなくていいのが助かります。」
先生「そうですね。VB.NETでは、For Eachを使うことでコードが自然な日本語の流れに近くなります。初心者ほど恩恵を感じやすい構文ですよ。」
生徒「リストや文字列にも使えると知って、いろいろな場面で使えそうだと思いました。」
先生「その気づきは大切です。For Eachはコレクション処理の基本なので、これを理解できればVB.NETの応用力が一気に伸びます。」
生徒「これからは、繰り返し処理が出てきたら、まずFor Eachを使えるか考えてみます。」
先生「とても良い姿勢ですね。ForとFor Eachを使い分けられるようになると、VB.NETのプログラムがより読みやすく、安定したものになりますよ。」