【Select Case&For】マクロ内で分岐とループを組み合わせる-2

お知らせこの記事は【エラーにならない】 VBA条件分岐完全ガイドコードのテンプレを紹介の関連記事です

お知らせ記事には広告が含まれておりますがExcelのスキルUPに繋がる様コンテンツ自体は手を抜かずに作成しております

複数の選択肢への分岐とループを組み合わせ_SelectCase&For

Select CaseステートメントとFor~Nextステートメントを一緒に使ったコードを紹介していきます。

Select Caseステートメントは以下のような環境で使われることが多いです。

  • 条件は1つ
  • 選択肢は複数(多い)
EnjoyExcel
EnjoyExcel

上記のような環境下でおすすめですが該当しないケースでも使用することができます。

まずは試してみましょう。

続いて紹介した環境をもとにサンプル(例題)を用意してみます。

例-1

セルA1に書かれている都道府県の文字の末尾は「都」、「道」、「府」、「県」のうちどれか?

  • 文字の末尾を確認するという条件です。条件は1つです。
  • 都道府県のうちどれかを選択するので選択肢は4つです。

このような環境はSelect Caseの使いどころとしてピッタリの環境です。ではもう少し例題を複雑にしましょう。

先程の例題(例-1)は単数セルの文字に対して複数の選択肢から条件に一致するものを選ぶことになっています。

これが複数セルに対する問いだったらどうでしょうか?

例-2

A列に書かれている都道府県の文字の末尾は「都」、「道」、「府」、「県」のうちどれか?

回答を用意するセルが複数になりました。加えてA列には何行目まで文字列が用意されているのか分かりません。

このような状態を解決できるのが繰り返し処理(For~Nextステートメント)です。

EnjoyExcel
EnjoyExcel

For~Nextステートメントで列に居る情報に対して順番にアクセスする事ができます。

最終的に例-2のような環境ではSelect CaseとFor~Nextステートメントを一緒に使う事になります。

これで複雑な仕事にも対応できる様になります。以降で解説していきます。

SelectCaseは多くの分岐にも対応出来ます。

この記事でわかる事

シンプルに1つです。

Select CaseステートメントとFor〜Nextステートメントの組み合わせについて勉強します。

この記事でわかる事
  1. 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ステートメントの処理が実行されることになります。

SelectCase冒頭の「条件」ではFor~Nextステートメントで使っている変数を組み込みます。

これでループが回る度に異なる条件で問い合わせができる状況を用意します。

以降で具体的なコードを用いて解説することにします。

使い方

セルには以下のような情報が記入されています。最終的にはセルE5~セルE14に文字が入ります。

D列の各行に記載のキーワードから末尾1文字を確認しE列の各行にD列で確認した末尾を入力するという作業です。

この作業は「Select Case」と「For~Next」ステートメントを勉強する為だけに用意した事例です。

「こんな事やる必要あるのか?」と考えてしまいますが作業自体に意味は無いという事を先にお伝えしておきます。

画像に対応したコードです。ボタンを押すとコードがコピーできます。

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が「府」。残りは「県」です。

2行目でDimから始まるコードは変数の宣言です。

ここで宣言された変数はコード内で変数として使用出来ます。

続いて3行目のコードです。変数に値を代入するというコードです。

始点は5ですが終点は見た事無いコードが書かれていますね。

これは最終行を取得する為のコードです。

変数と最終行を取得するコードについて分からない方はリンクを用意しておきました。必要に応じて確認ください。

各種要素については以下リンクを参照ください

これでリストの最終行を取得する事が出来ます。

今回のリストの配置からすると終点は14という数値を得る事が出来ます。

続いて変数の解説です。

For句で使われている変数rはSelect Caseステートメントの中でも使われています。

大外のFor句の繰り返し処理でSelect Caseステートメント内では毎回異なるセルを選択出来ます。

変数rが活躍してくれます。

SelectCaseのイメージです
SelectCaseのイメージです。
コードの流れ

通常通り上から実行されます。6行目で末尾は「都」ですか?と確認しています。

一致していれば8行目のコードが実行されることになります。

一致しない時は残りのCase句を通過します。先程は例で「都」の説明をしましたが実際は最初の値は沖縄県です。

18行目のステートメントでTrueとなり20行目のコードが実行されます。

セルに用意された文字の末尾が選択肢にかからなかった時はCase Elseに進みます。

ここでは空欄になる様に設定していますが「値無し」などセルに文字を返しても良いです。

最後にループの解説です。27行目のNext句の後変数rは5から6に変化します。

その後4行目から再びSelect Caseステートメントを通過しながらE列のセルに値を記入するという流れです。

課題

選択肢は増えても減ってもコードの実行時間に大きな差はありません。

コードも整理されて非常に見易く使い勝手も良いです。

各Case句の中で再度If~Thenステートメントを組み込む事も可能でかなり柔軟に条件が設定出来ます。

課題はほぼ無いです。

あるとしたら「慣れないと使いにくい」という事でしょうか。

コードが整理されているという事はご自身の思考が整理されてないと使えないコードです。

訓練が必要というのが課題になります。

まとめ

Slelect CaseステートメントとFor~Nextステートメントを一緒に使いました。

フォーマットとして使える様に出来るだけシンプルな型を用意しました。

そのままコピペしてご自身でコードを実行してみてください。

(セルの内容は面倒ですが再現してください)

本日勉強したこと
  1. SelectCaseステートメントと

    For~Nextステートメントの

    組み合わせ

繰り返し読んで理解しましょう

Enjoy Excel

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

EnjoyExcel

タイトルとURLをコピーしました