【VBA】マクロ処理を途中で止める方法!結果次第で続行も可能!

f:id:yshgs_elec:20201015082558j:plain

「マクロ処理の途中結果から、処理を継続するか、中止するかを切り替えれるようにしたい。」

この記事ではこんな悩みを解決します。

 

〇この記事で学べるスキル

■vbYesNo:ある質問に対してYesかNoで答えることができる

 

初心者に寄り添い、画像多めで解説していきますので、ぜひ最後までご覧ください。

 

それではさっそくやっていきます!

スポンサーリンク

状況判断スキル:vbYesNoについて

基本的にこのスキルはメッセージボックスというスキルと一緒に使用します。

①メッセージボックスで処理を続けるかどうかの質問をする。

②vbYesNoスキルでYESかNOか答える

という流れです。

 

さらにその後に、YESの場合の処理、NOの場合の処理を指示してあげればOKです。

ここからは実際の使い方を見ていきましょう。

スポンサーリンク

vbYesNoの使い方

基本的な使い方は以下の通りです。

変数=MsgBox(“質問文”,vbYesNo)

このようにある変数を用意してあげておき、その変数にYesかNoかを覚えさせておきます。

 

そしてその変数がYesだったら・・・Noだったら・・・

という具合に処理を続けていきます。

 

とはいえ、これだけではよくわからないと思いますので、実際のVBA上での使用例を見てみましょう。

 

スポンサーリンク

vbYesNoの使用例

今回は以下の画像のようにA1セルからA5セルまでに文字を入力していくという簡単な処理を題材に説明していきます。

vbYesNoを適用する際のサンプルデータ

今回はA1セルから順番に文字を入力していき、A3セルまで記述が終わった段階で、その後のA4,A5セルの処理を続けるかどうかを判断できるような処理を記述してみたいと思います。

 

その処理を記述したのが以下のコードになります。

Sub judge_macro()
    'A1~A3セルまでを記述
    Cells(1, 1) = "aaa"
    Cells(2, 1) = "bbb"
    Cells(3, 1) = "ccc"
    '処理を続けるかどうかの判断
    judge = MsgBox("処理を続けますか?", vbYesNo)
    If judge = vbNo Then
        Exit Sub
    End If
    'A4,A5セルまでを記述
    Cells(4, 1) = "ddd"
    Cells(5, 1) = "eee"
End Sub

先ほど説明したように以下のような形が記述されていることがわかると思います。

 judge = MsgBox(“処理を続けますか?”, vbYesNo)

※今回は変数に【judge】を、質問文に【処理を続けますか?】と記述しています。

 

この処理を実行すると以下のような流れで処理が進みます。

以下がマクロ実行前のなにもない状態です。

マクロ実行前のエクセルシートの内容

先ほどのマクロを実行します。

 

このようにA1~A3セルまでの記述が完了しており、さらに先ほどの処理で記述したメッセージボックスが出現します。

ここが今回のメインイベントですね。

マクロ実行中の表示内容

ここからは、はい(Y)、いいえ(N)それぞれを選択した場合での結果をご紹介していきます。

 

まずは、はい(Y)を選択した場合です。

このように、目的の処理すべてが完了しています。

※今回の処理では、vbYesNoでNoが選択されたときに処理が止まるように記述していますので、YESの場合は処理が止まることなく進みます。

サンプルマクロをYESで実行した結果

 

次に、いいえ(N)を選択した場合です。

ここでは以下の画像のようにA3セルまでの記述で処理が終了しています。

サンプルマクロをNOで実行した結果

これはVBAコード上での以下の記述によって、いいえ(N)が選択された際は、処理が終了するように指示されているためです。

If judge = vbNo Then
Exit Sub

※Exit Subで強制的に処理を終了させることが出来ます。便利なスキルですので、これもぜひ覚えておきましょう。

 

vbYesNoを使った条件判断について、理解いただけたのではないでしょうか。

 

今回のスキル紹介は以上になります。

スポンサーリンク

おわりに

というわけで今回はマクロ処理の実行中に、処理を続けるか、途中でやめるかを判断できるようにするスキルを紹介しました。

 

VBA処理は途中経過次第で、後半はやっても意味がない、という状況も多くあります。

 

特に処理に多くの時間がかかる場合は時間の無駄になってしまいますので、要所でこのスキルを入れておくことで、より業務を効率化できるはずです。

ぜひ覚えておきましょう!

 

このように、このブログでは、エクセル(VBA)を中心に、様々な業務効率化スキルを紹介しています。

■業務の生産性を上げたい。

■早く帰って子供と遊びたい。

こんな人はぜひ他の記事も読んでみてください。

また、VBAを使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。

私にわかる範囲であればご協力いたしますので。(もちろん無料です。)

最後に・・・

この記事が役に立ったという方はぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

Twitterもやっていますので、興味があれば覗いてみてください。

それではまた!!

コメント

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