【マクロVBA】繰り返し処理動作の変数を任意の数値・途中から実行する!For Nextなどにも対応

基礎知識

本記事はマクロVBAのデバッグに便利な知識について説明します。
今回は「For Next」の繰り返し処理のデバッグについてです。


For Nextの記事についてはこちらから☟

【VBA知識 7】FOR…NEXTで指定した数値で繰り返し・ループ動作をする。 ► 独学エクセル塾 (dokugakuexcel.com)

For Nextの繰り返し処理が多い場合はデバッグは大変ですよね。
F8を連打して実行するのも不便ですし、ブレークポイントを使用しても
処理するプログラム行は手動で実行しないといけません。

そこで今回はFor Nextの変数の数値を任意の数値に変え、途中から実行する方法を紹介します。
それでは見ていきましょう。




■見本のプログラム

まず、本記事の内容を紹介するにあたり、見本のプログラムを用意しました。
下図をご覧ください。

3行目から25行目まである、B・C列の数値の和をE列に出力したいと思います。
見本でプログラムを作成しました。

Sub 数値1と2の和()

Dim A As Long

For A = 3 To 25 Step 1
Cells(A, 5) = Cells(A, 2) + Cells(A, 3)
Next A

End Sub

では「F5」を押して全実行してみましょう。
結果はこのようになります。

狙い通り数値1と2を足すことができました。
では本題に移りたいと思います。

下図をご覧ください。

仮に15列目までは確認が取れており、16行目から実行したいと思います。
方法としては2つあります。

内容は下記の通りです。

①イミディエイトウインドウを使用して変数を変更する
②変数の変更をプログラムに織り込む

悩んでない状態でこの記事をご覧になった方は
ForのAを16から開始すればいいと思うでしょうが
重複した繰り返し処理では本内容の技術が必要になってきます。

それでは見ていきましょう。

■イミディエイトウインドウを使用して変数を変更する

まずはイミディエイトウインドウを使用する方法についてです。
こちらは現在のプログラムを変更することなく、繰り返し処理の変数を変更できるので
おすすめです。

再度プログラムを見ていきましょう。

Sub 数値1と2の和()

Dim A As Long

For A = 3 To 25 Step 1
Cells(A, 5) = Cells(A, 2) + Cells(A, 3)
Next A

End Sub

まず繰り返し処理の開始位置まで実行します。
見本のプログラムでは「Cells(A, 5) = Cells(A, 2) + Cells(A, 3)」までですね。

現在のAは3からスタートなので最初の「3」になってます。

しかし今回は16行目から確認(デバッグ)したいので
繰り返し処理をすることなくA=16にしないといけません

ここで使用するのはイミディエイトウインドウです。
まず、イミディエイトウインドウを表示します。

表示方法として「Ctrl + G 」または
メニューの「表示」から「イミディエイトウインドウ」を押します。

すると下図のようなウインドウが現れます。

この記事ではイミディエイトウインドウについて詳しくは表示しませんが
こちらで変数の変更が可能です。

今回は変数Aの数値を「16」に変更したいので
「A=16」とイミディエイトウインドウに打ち込みます

そして「Enter」を押してみましょう。
結果はこのようになります。

繰り返し処理をしなくても変数を狙いの「16」にすることができました
ではプログラムを全実行してみましょう。

16行目から実行できてますね。

この方法はプログラムの変更がなく、動作確認(デバッグ)後もプログラムを元に戻したりなど
手戻り作業がないのでとても便利です。

■変数の変更をプログラムに織り込む

次に変数の変更をプログラムに織り込む方法について紹介します。
こちらの内容はプログラム変更によって直接変更するため
イメージしやすいですが、間違った手順で実行すると無限ループになってしまうので注意が必要です。
イミディエイトウインドウでイメージしにくい方はこちらの方法をご活用ください。

では再度プログラムを見てみましょう。

Sub 数値1と2の和()

Dim A As Long

For A = 3 To 25 Step 1
Cells(A, 5) = Cells(A, 2) + Cells(A, 3)
Next A

End Sub

この状態だとAは3からスタートですが動作確認(デバッグ)ではAを16からスタートしたいとします。

つまりA=16をプログラムに組み込みます

Sub 数値1と2の和()

Dim A As Long

For A = 3 To 25 Step 1
A = 16
Cells(A, 5) = Cells(A, 2) + Cells(A, 3)
Next A

End Sub

とてもシンプルですね。
しかしこのまま全実行すると無限ループになっています。

理由としてFor で Aを3から25まで実行するはずですが
Aを16に置き換えて処理を終えてもAが再度16に置き換えるので
無限ループになる仕組みです

なので動作確認(デバッグ)方法としてA=16まで実行した後は
A=16を無効または削除する必要があります

無効または削除した後は全実行で構いません。

無事、16行目から実行できてますね。

⬛︎公式の説明

わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟

イミディエイト ウィンドウ (VBA) を使用する | Microsoft Learn

■まとめ

いかがだったでしょうか。
デバッグで繰り返し処理は曲者ですよね。

本記事の内容を活用して、動作確認(デバッグ)を効率よく実行してみてください。
変数を直接変更する方法を実行する場合は無限ループになってもいいように保存を先にしておいた方がいいです。

それでは次回の記事でお会いしましょう。

コメント