【Ifのネスト&For】マクロ内で分岐とループを組み合わせる-4

お知らせこの記事はマクロの分岐の書き方完全解説テンプレートとして使えるコードを紹介の関連記事です

条件分岐とループを組み合わせたコードを紹介_Ifのネスト&For

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

まとめ記事で使っているデータシートをもとにしたコードを紹介します。任意の都道府県が書かれてるセルから末尾を調べて同じ文字を隣のセルに入力するという作業です。

まとめ記事では単数のセルに回答を用意するコードでしたがここでは複数のセルに結果を返すために繰り返し処理を用いたコードを使います。

EnjoyExcel
EnjoyExcel

ここを押さえると理解が進む」というポイントが何点かあるので紹介していきます。

綺麗なネスト構造です。イメージだけで用意した画像です。

この記事でわかる事

今回はシンプルに1つです。If~ThenステートメントのネストとFor〜Nextステートメントの組み合わせについて勉強します。

この記事でわかる事
  1. If~Thenステートメントのネストと

    For~Nextステートメントの

    組み合わせ

この記事で型を習得しましょう

Enjoy Excel

関連記事

条件分岐のまとめ記事です。If~Thenステートメントのネストを含め4つの条件分岐についてコードを用いて解説しています。ネストの説明もしていますので分からない方は一読願います。

繰り返し処理

繰り返し処理について解説しています。今シリーズで使用しているFor~Nextステートメントの解説もしております。

繰り返し処理と条件分岐の組み合わせ

セルの情報をもとに実際のコードを使って解説していきます。

If~ThenのネストとFor~Nextステートメントの組み合わせ

出来るだけシンプルな型を用意しました。この型で基本を身につけましょう。

構文

実際に仕事をコードに落とし込む時は変数、始点、終点等の要素に数値が入っていないと分かりにくいです。ここではあくまで配置として覚えてください。

For 変数 = 始点 to 終点
 If 条件A Then
  条件A=True
 Else
  If B Then
   条件B=True
  Else
   If C Then
    条件C=True
   Else
    全ての条件に合致しない時の処理
   End If
  End If
 End If
Next

考え方の基本となるところだけ解説しておきます。大外にFor~Nextステートメントが配置されます。For句からNext句までをループする事になります。

ループの中ではループの回数と同じだけIf~Thenステートメントの処理が実行されることになります。

今回はネストを使用しています。赤色の条件分岐の結果次第で青、もしくは緑色の条件分岐構文に処理が移動していきます。

毎回同じ条件で分岐を確認しても結果は同じです。ループの都度異なる条件を設定出来る様変数を使った仕掛けを組み込みます。以降で具体的なコードを用いて解説することにします。

使い方

セルには以下のような情報が記入されています。D列の各行から末尾1文字を確認しE列の各行に末尾を入力するというコードを紹介します。セルE5~セルE14に文字が入ります。

一見線路が分岐しているのでこの写真・・・かと思いきや実は画像上部の電線も分岐と繰り返し処理の宝庫です。
セルの画像-ネスト&繰り返し処理

画像に対応したコードです。

Sub 条件分岐と繰り返し4()

Dim r As Long

For r = 5 To Cells(Rows.Count, 4).End(xlUp).Row

    If Right(Cells(r, 4), 1) = "都" Then
    
    Cells(r, 5) = "都"
    
    Else
    
        If Right(Cells(r, 4), 1) = "道" Then
        
        Cells(r, 5) = "道"
        
        Else
        
            If Right(Cells(r, 4), 1) = "府" Then
            
                Cells(r, 5) = "府"
            
            Else
            
                If Right(Cells(r, 4), 1) = "県" Then
                
                    Cells(r, 5) = "県"
                
                Else
                
                    Cells(r, 5) = ""
                
                End If
            
            End If
        
        End If
    
    End If

Next

End Sub

解説

実行するとセルE5からセルE14まで漢字が1文字ずつ入力されます。セルE7が「都」、セルE13が「府」。残りは「県」です。

3行目でDimから始まるコードは変数の宣言です。ここで宣言された変数はコード内で変数として使用出来ます。

続いて5行目のコードです。変数に値を代入するというコードです。始点は5ですが終点は見た事無いコードが書かれていますね。これは最終行を取得する為のコードです。

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

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

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

続いて変数の解説です。For句で使われている変数rは各If~Thenステートメントの中でも使われています。

大外のFor句で繰り返し処理が行われる事で各If~Thenステートメント内では毎回異なるセルを選択出来るようになります。変数rが活躍してくれます。

コードの流れ

通常通り上から実行されます。7行目で末尾は「都」ですか?と確認しています。一致していれば9行目のコードが実行されることになります。

一致しない時は残りのIf~Then句を通過します。先程は例で「都」の説明をしましたが実際は最初の値は沖縄県です。25行目のステートメントでTrueとなり27行目のコードが実行されます

セルに用意された文字の末尾が選択肢にかからなかった時はElseに進みます。ここでは空欄になる様に設定していますが「値無し」などセルに文字を返しても良いです。

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

その後7行目から再びIf~ElseIfステートメントを通過しながら必要に応じてE列のセルに値を記入するという作業が進んでいきます。

こちらの写真だと線路より電線の方が条件分岐と繰り返し処理がたくさん配置されている事が分かり易いですね。

課題

他の条件分岐のステートメントとコードの量は多くなる事で階層が分かりにくくなってきます。「理解してないと読みにくい」というのが課題です。

ただしセルに直書きする関数のIf文を理解されている方からするとこのステートメントの方がしっくりくるはずです。今までは横に書いていた関数をVBAの作法で縦書きしただけの違いです。

私はSelect CaseステートメントやElseIfステートメントよりIf~Thenステートメントのネストの方が分かり易かったです。最初は皆様各自が分かり易かったものを使われるのが良いでしょう。

まとめ

If~ThenステートメントのネストとFor~Nextステートメントを一緒に使いました。

フォーマットとして使える様に出来るだけシンプルな型を用意しましたのでそのままコピペしてご自身でコードを実行してみてください。(セルの内容は面倒ですが再現してください)

本日勉強したこと
  1. If~Thenステートメントのネストと

    For~Nextステートメントの

    組み合わせ

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

Enjoy Excel

EnjoyExcel

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