お知らせこの記事は【エラーにならない】 VBA条件分岐完全ガイドコードのテンプレを紹介の関連記事です
条件分岐とループを組み合わせたコードを紹介_If&For
マクロを勉強する根本的な理由は「作業を効率化させたい」という事に尽きます。
よって最終的には覚えたコードをご自身の仕事に置き換える事になります。
しかしいざやってみると「どうやってやるのか分からない」となり立ち止まってしまう事は良くあります。
色々難しい点はあるのですが初心者の頃に一番ネックになるのは「条件分岐と繰り返し処理の組み合わせ」です。
この記事では出来るだけ簡単な事例を使い条件分岐と繰り返し処理を組み合わせたコードを用意します。
コードはテンプレートとして使ってください。勿論コード自体の解説もあります。
Ifステートメントを2回以上繰り返したい時にはおすすめのコードになります。
Ifステートメントと繰り返し処理を一緒に使う事で少ないコードで多くの作業をこなします。
この記事でわかる事
今回はシンプルに1つです。
If~ThenステートメントとFor〜Nextステートメントの組み合わせについて勉強します。
Ifステートメントと
For~Nextステートメントの
組み合わせ
Enjoy Excel
関連記事
条件分岐のまとめ記事です。
If~Thenステートメントを含め4つの条件分岐についてコードを用いて解説しています。
繰り返し処理
一定の条件のもと処理を繰り返すというステートメントです。
あらかじめ用意された型の中で設定した条件のもと処理を繰り返します。
自身で決めた回数分ループするものや対象となるオブジェクトの分だけループするなど出来る事は色々です。
以下に例を挙げてみます。
等々指定できる条件は多岐にわたります。
指定する条件によって最適なステートメントを選択する事になります。
今回はその中でも最もスタンダードなFor~Nextステートメントを使用します。
For~Nextステートメント
マイクロソフトのOffice VBAリファレンスではForNextステートメントについて以下の様に書かれています。
指定した回数だけ、一連のステートメントを繰り返します。
For…Next ステートメント Microsoftさんのリンク
シンプルですね。やってる事はこれだけです。以下説明を続けます。
構文
基本となる構文です。For句とNext句の間に居るコードがループの対象となります。
For 変数 = 始点 to 終点
ループ内の処理
Next
ループする回数はFor句の始点から終点までとなります。
よってここには数値が入ります。おのずと変数も数値という事になります。
For句で決められた回数分だけループが行われるという建付けです。
ループの中ではループの回数と同じだけ処理が実行されます。
具体的な使い方は以下解説をご覧ください。
使い方
セルE5~セルE14の空欄にhello worldと記入してみます。
E列の表題には末尾と書いてあるのでhello worldだと表題と合ってないです。
ここではFor~Nextステートメントの練習用にデータを記入しますのでひとまずこのまま作業します。
上記セルに対応したコードです。
Sub 繰り返し()
Dim r As Long
For r = 5 To 14
Cells(r, 5) = "hello world"
Next
End Sub
解説
まずはFor~Nextステートメントの構造を理解しましょう。For句で必要なのは3点です。
- 変数
- 始点
- 終点
上記のコードに置き換えると変数はr、始点は5、終点は14です。
変数は値を変えられるオブジェクトです。変数という名前ですが文字列を扱う事も可能です。
ただしここでは数値を使う事になります。変数の詳細はこちらをご覧ください。
続いて始点と終点です。ここにはどちらにも数値が入ります。数値をとっている変数でも可です。
先程提示した For r = 5 to 14 というコードを使って説明します。
これは変数rに5~14の値が入る間はループが続きますというコードになります。
数値はループの度に1つずつ進みますので計10回ループします。
コードの流れ
3行目で変数を宣言します。数値が入る変数です。続いて5行目を通過すると変数rには5が代入されます。
続いて7行目です。Cells(r,5) = “hello world”という記載があります。
変数rは5なのでCells(5,5)ということになりセルE5にhello worldを記入する事になります。
9行目のNextを通過すると変数rは5から6に変化します。
このあとループが入りますのでコードは7行目に進みます。
7行目はCellsプロパティが居ますね。
rには6が入るのでCells(6,5)となりセルE6にはhello worldを記入する事になります。
この繰り返しでrが14の時の処理を終えたところでループを抜けて10行目以降に移る事になります。
これがFor~Nextステートメントの基本です。
ポイント
For句で用意された変数をうまく使いましょう。
変数rをCellsプロパティに組み込んで使っています。
これでループの度に異なるセルを選択出来る様になります。
これが繰り返し処理の最大のメリットです。
繰り返し処理と条件分岐の組み合わせ
ここからが本題です。セルの情報をもとに実際のコードを使って解説していきます。
If~ThenステートメントとForNextステートメントの組み合わせ
1番シンプルな型です。この型で基本を身につけましょう。
構文
実際に仕事をコードに落とし込む時は変数、始点、終点等の要素に数値が入っていないと分かりにくいです。
ここではあくまで配置として覚えてください。
For 変数 = 始点 to 終点
If 条件 Then
条件Trueの処理
Else
条件Falseの処理
End If
Next
考え方の基本となるところだけ解説しておきます。
大外にFor~Nextステートメントが配置されます。
For句からNext句までをループする事になります。
ループの中ではループの回数と同じだけIf~Thenステートメントの処理が実行されることになります。
毎回同じ条件で分岐を確認しても結果は同じです。
ループの都度異なる条件を設定出来る様変数を使った仕掛けを組み込みます。
以降で具体的なコードを用いて解説することにします。
使い方
セルには以下のような情報が記入されています。
D列の各行から末尾1文字を確認しE列の各行に末尾を入力するというコードを紹介します。
セルE5~セルE14に文字が入ります。
画像に対応したコードです。
Sub 条件分岐と繰り返し1_1()
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) = "都"
End If
If Right(Cells(r, 4), 1) = "道" Then
Cells(r, 5) = "道"
End If
If Right(Cells(r, 4), 1) = "府" Then
Cells(r, 5) = "府"
End If
If Right(Cells(r, 4), 1) = "県" Then
Cells(r, 5) = "県"
End If
Next
End Sub
解説
実行するとセルE5からセルE14まで漢字が1文字ずつ入力されます。
セルE7が「都」、セルE13が「府」。残りは「県」です。
始点は5ですが終点は見た事無いコードが書かれていますね。これは最終行を取得する為のコードです。
このコードは難しいのですが3つに分けて分かりやすく説明しています。こちらをご覧ください。
これでリストの最終行を取得する事が出来ます。
今回のリストの配置からすると終点は14という数値を得る事が出来ます。
続いて変数の解説です。
For句で使われている変数rは各If~Thenステートメントの中でも使われています。
大外のFor句で繰り返し処理が行われる事でIfステートメント内では毎回異なるセルを選択出来ます。
変数rが活躍してくれます。
コードの流れ
通常通り上から実行されます。
4行目で末尾は「都」ですか?と確認しています。
一致していれば6行目のコードが実行されることになります。
その後は残りのIf~Thenステートメントを通過します。
先程は例で「都」の説明をしましたが実際は最初の値は沖縄県です。
17行目のステートメントでTrueとなり19行目のコードが実行されます。
最後にループの解説です。22行目のNext句の後変数rは5から6に変化します。
その後4行目から再びIfステートメントを通過しながら必要に応じてE列のセルに値を記入します。
課題
If~Thenステートメントでは条件とは異なるキーワードに出会うと無条件でFalseになります。
よって今回の場合はD列文字列の末尾が都道府県ではない時はE列は空欄になります。
エラーにならず空欄になって次の行に進んでくれるという意味ではメリットの方が強い感じもします。
しかし「エラー」など文字を入力したい時は少し物足りないコードです。
まとめ
If~ThenステートメントとFor~Nextステートメントを組み合わせたコードを紹介しました。
最初はこの型を使ってコードを書いて動かしてみましょう。
自身でトライ&エラーを行う事が大事です。繰り返し処理だけに繰り返し勉強してみましょう。
Ifステートメントと
For~Nextステートメントの
組み合わせ
Enjoy Excel