
お知らせこの記事はマクロの分岐の書き方完全解説テンプレートとして使えるコードを紹介の関連記事です
条件分岐とループを組み合わせたコードを紹介_SelectCase&For
本記事ではSelect CaseステートメントとFor~Nextステートメントを一緒に使ったコードを紹介していきます。Select Caseステートメントは以下のような環境で使われることが多いです。
- 条件は1つ
- 選択肢は複数(多い)
要件をもとに例題を用意してみます。
セルA1に書かれている都道府県の文字の末尾は「都」、「道」、「府」、「県」のうちどれか?
文字の末尾を確認するという条件です。条件は1つです。都道府県のうちどれかを選択するので選択肢は4つです。このような環境はSelect Caseの使いどころとしてピッタリの環境です。

例題は「セルA1に書かれている・・・」となっています。単数セルに書かれている文字に対して回答を用意する為に複数の選択肢の中から条件に一致するものを選ぶことになります。
例題にあった単数セルが複数セルだったらどうでしょうか?
A列に書かれている都道府県の文字の末尾は「都」、「道」、「府」、「県」のうちどれか?
回答を用意するセルが複数になりました。加えてA列には何行目まで文字列が用意されているのか分かりません。このような状態を解決できるのが今回のコードです。

For~Nextステートメントで列に居る情報に対して順番にアクセスする事ができます。
この記事でわかる事
今回はシンプルに1つです。Select CaseステートメントとFor〜Nextステートメントの組み合わせについて勉強します。
Select Caseステートメントと
For~Nextステートメントの
組み合わせ

Enjoy Excel
関連記事
条件分岐のまとめ記事です。Select Caseステートメントを含め4つの条件分岐についてコードを用いて解説しています。
繰り返し処理
繰り返し処理について解説しています。今シリーズで使用しているFor~Nextステートメントの解説もしております。
繰り返し処理と条件分岐の組み合わせ
セルの情報をもとに実際のコードを使って解説していきます。
Select CaseステートメントとFor~Nextステートメントの組み合わせ
出来るだけシンプルな型を用意しました。この型で基本を身につけましょう。
構文
実際に仕事をコードに落とし込む時は変数、始点、終点等の要素に数値が入っていないと分かりにくいです。ここではあくまで配置として覚えてください。
For 変数 = 始点 to 終点
Select Case 条件
Case 条件の回答A
条件が回答Aに合致した時の処理
Case 条件の回答B
条件が回答Bに合致した時の処理
Case 条件の回答C
条件が回答Cに合致した時の処理
Case 条件の回答D
条件が回答Dに合致した時の処理
・・・・・
End Select
Next
考え方の基本となるところだけ解説しておきます。大外にFor~Nextステートメントが配置されます。For句からNext句までをループする事になります。
ループの中ではループの回数と同じだけSelect Caseステートメントの処理が実行されることになります。
毎回同じ条件で分岐を確認しても結果は同じです。ループの都度異なる条件を設定出来る様変数を使った仕掛けを組み込みます。以降で具体的なコードを用いて解説することにします。
使い方
セルには以下のような情報が記入されています。D列の各行から末尾1文字を確認しE列の各行に末尾を入力するというコードを紹介します。セルE5~セルE14に文字が入ります。

画像に対応したコードです。
Sub 条件分岐と繰り返し2()
Dim r As Long
For r = 5 To Cells(Rows.Count, 4).End(xlUp).Row
Select Case Right(Cells(r, 4), 1)
Case "都"
Cells(r, 5) = "都"
Case "道"
Cells(r, 5) = "道"
Case "府"
Cells(r, 5) = "府"
Case "県"
Cells(r, 5) = "県"
Case Else
Cells(r, 5) = ""
End Select
Next
End Sub
解説
実行するとセルE5からセルE14まで漢字が1文字ずつ入力されます。セルE7が「都」、セルE13が「府」。残りは「県」です。
3行目でDimから始まるコードは変数の宣言です。ここで宣言された変数はコード内で変数として使用出来ます。
続いて5行目のコードです。変数に値を代入するというコードです。始点は5ですが終点は見た事無いコードが書かれていますね。これは最終行を取得する為のコードです。
変数と最終行を取得するコードについて分からない方はリンクを用意しておきましたので必要に応じて確認ください。
これでリストの最終行を取得する事が出来ます。今回のリストの配置からすると終点は14という数値を得る事が出来ます。
続いて変数の解説です。For句で使われている変数rはSelect Caseステートメントの中でも使われています。
大外のFor句で繰り返し処理が行われる事でSelect Caseステートメント内では毎回異なるセルを選択出来るようになります。変数rが活躍してくれます。

コードの流れ
通常通り上から実行されます。9行目で末尾は「都」ですか?と確認しています。一致していれば11行目のコードが実行されることになります。
一致しない時は残りのCase句を通過します。先程は例で「都」の説明をしましたが実際は最初の値は沖縄県です。21行目のステートメントでTrueとなり23行目のコードが実行されます。
セルに用意された文字の末尾が選択肢にかからなかった時はCase Elseに進みます。ここでは空欄になる様に設定していますが「値無し」などセルに文字を返しても良いです。
最後にループの解説です。31行目のNext句の後変数rは5から6に変化します。
その後7行目から再びSelect Caseステートメントを通過しながら必要に応じてE列のセルに値を記入するという作業が進んでいきます。
課題
選択肢は増えても減ってもコードの実行時間に大きな差はありません。コードも整理されて非常に見易く使い勝手も良いです。
各Case句の中で再度If~Thenステートメントを組み込む事も可能でかなり柔軟に条件が設定出来ます。課題はほぼ無いです。
あるとしたら「慣れないと使いにくい」という事でしょうか。コードが整理されているという事はご自身の思考が整理されてないと使えないコードです。訓練が必要というのが課題になります。
まとめ
Slelect CaseステートメントとFor~Nextステートメントを一緒に使いました。
フォーマットとして使える様に出来るだけシンプルな型を用意しましたのでそのままコピペしてご自身でコードを実行してみてください。(セルの内容は面倒ですが再現してください)
SelectCaseステートメントと
For~Nextステートメントの
組み合わせ

Enjoy Excel
自身でトライ&エラーを行う事が大事です。繰り返し処理だけに繰り返し勉強してみましょう。