繰返し文と条件分岐文との組み合わせ


ここで説明する繰返し文と条件分岐文との組み合わせは、マクロの プログラムを組む上での基本構文となりますので、確実に理解して戴ければと考えます。

では繰り返し文に前述の条件分岐文を組み合わせた例文を考えてみましょう。
エクセルシートのD列に先ほど書き込まれた数値を消して起動ボタンのプロシージャに次のようにプログラムを書込んで見ましょう。
図1
ここで「For」に対して「Next」及び「If」に対して「End If」を忘れないようにしましょう。
エクセルシートの2列目(B列)に下図のようにランダムに数値を書込んで下さい。図2
書き終わったら、「起動ボタン」をクリックしマクロを実行してみて下さい。その数値に応じた果物名がC列に下図のように表示されます。
図3
ここで、nの数値はエクセルに書き込まれたデータ数(15個)に応じて設定しなければならないのかとの疑問が出るかと思います。
エクセルのデータを増やす度に変数nの値を書き換えなければならないとなると大変不便です。
そこでnの値をもっと大きな数値に設定しておきます。
ある条件を設定し、「Exit For」との用語を使用することによりこの繰り返し文を中断させることができます。
Exit For』の説明:
今回繰返しを15としていますが、「15」を「20」に書き替えてみて下さい。図4
ボタン1をクリックしマクロを実行してみて下さい。
図5
このプログラムは、B列に記入されている数値がどの果物に対応するか検索させています。
従って数 値のない(空白)行があれば、その空白行以降では、このプログラムを実行させる必要がないと考えて問題無いでしょう。
「数値が記入されていない(空白)行があれば、それ以降の繰返し作業を行う必要がない」として繰返し作業を中止させ ることができます。
その指示を行うのが『Exit For』です。
(英語の「Exit」には出て行くと言う意味がありますので、For ~Nextのループから出て行きなさいとの指示になります。)
どのように命令するかと言うと、B列に数値がないと言うことは、「B列が空白ならば」となり ます。
セルが空白を表す表現としては、「Cells(2+n, 2).Value="" (ダブルクオーテーション)」となります。
前のプログラムに空白ならば「Exit For」しなさいとの条件を下図のように追加します。このプログラムの流れを訳すと次のようになります。
「もしCells(2 + n, 2).Valueが空白ならば、For~Nextの繰り返し作業を中断(出て出て行きなさい)しなさい、空白で無ければCells(2 + n, 2).Valueの値に応じた果物名をCells(2 + n, 3).Valueに代入しなさい。」
図6
先に書き込まれているエクセルの「C列」の果物名を消去して「起動ボタン」をクリックしてください。
数値のない18行目以降は何も表示されていない即ち18行が空白のため繰返しが中止されたことが分かるかと思います。
図7
ではB列の途中のセルを空白にしてみましょう。
再度、C列の果物表示を消して、B列の9行目を空白として起動ボタンをクリックしてみましょう。
図10
当然9行目が空白のため、それ以降の繰り返しのプログラムは中断し書込みはありません。
もうすでに理解いただいたかと思いますが、もう少し遊んで見ましょう。
もし空白が2行続いたならば、繰り返しの作業を中断させるが、1行のみであれば繰り返しを継続するとしましょう。
プログラムは次のようになります。
アンダーバー( _ )は、1行のプログラムが長くなり見づらく改行を行ないたい場合に使用します。
但しアンダーバーの前にはスペースが必要です。
(このスペースは自動で挿入してくれません。)無い場合にはデバッグ表示されます。
図11
C列の果物名を再度消去して、「起動ボタン」をクリックしてみましょう。
9行目のみが空白の場合、繰り返し作業は中断せずにプログラムは実行されます。
図12
もし10行目も空白にすると、それ以降は実行されません。
図16
エクセルシートのデータの消去:
ここまで条件分岐、及び繰り返し文についての説明を行なってきましたが、その都度プログラムの実行状況の確認のため、エクセルシート上に前に書き込まれた 表示を消してもらっていました。
直近では、C列に書き込まれた果物表示の消す作業を行なってもらいましたが、この消去の作業をプログラムに追記してみましょう。
消去を行なうということは即ち空白にすることを意味します。空白を行なおうとする場合、一つのセルの場合、又は表内のデータを消去する場合もあります
単一セルの場合は「Cells(行番号, 列番号).Value=""」ですが、表 内を消去する場合には範囲の指定を行なう必要があります。
範囲指定の仕方は「Range(Cells(行番号,列番号), Cells(行番号、列番号))」 で行ないます。
この範囲の値(Value)を空白にする必要がありますので、Range(Cells(行番号,列番号), Cells(行番号,列番号)).Value=""」と指示します。
起動ボタンのプログラムの最初に空白(消去)処理をさせますので、プログラムの最初に書き込み ます。
図13
プログラムは以下のようになります。
図14
起動ボタンで実行して確認しますが、動作が速すぎて分かりづらいかと思いますので開始位置のCells(3, 3)、及び終了位置のCells(22, 3)に適当な文字を書き込んで実行してみてください。
Cells(3, 3)の値が「りんご」に戻り、Cells(22, 3)が空白になっているのがわかるかと思います。
下図ような表の場合の範囲指定は、同様にRange(開始セル位置,終了セル位置).Valueで範囲を設定します。
図15

この条件分岐及び繰返しの組み合わせの構文は非常に重要なので、もう一点具体的な事例を紹介して行きたいと考えます。
実験で得たデータから分布図を作成するための区間毎の度数を件数するのに「条件分岐」、及び「繰り返し」文を活用してみましょう。

次ページへ

サイドバータイトル
inserted by FC2 system