設定した条件や場面によってプログラムを飛ばして
別の処理プログラムを読み取りたいと思ったことはないでしょうか。
ループを抜け出す際にも使用できます。
今回は、そんな時に使えるGoToについて説明します。
IFなどに合わせるととても便利です。
それでは見ていきましょう。
■GoTo の構造
まずは構造から見ていきましょう。
GoTo ○○
‘処理①
○○:
‘処理②
GoTo ○○の説明
GoToの後に飛ばしたい位置のラベル・名前を付けます。
「A」でも「1」でも「あ」でも構いません。
○○:の説明
プログラムを飛ばしたい先の前の行に入れます。
この時の○○はGoToでつけたラベル・名前と合わせます。
なのでGoTo TTT ですと 飛ばす先の前の行は「TTT:」となります。
上記の見本を見てみますと処理①飛ばして
処理②に飛ぶようになりますね。
こちらはIFのような条件分岐とは異なり、強制的に分岐が実行できます。
■実践
それでは実践です。2つのパターンを紹介していますので使い分けてください。
・通常時にプログラムを指定ラベル・位置まで飛ばす
下図のシートを用意しました。
B3にAかBを打つと・・・
「Aの処理」「Bの処理」が出力される仕組みを作ってみます。
仮に下図のようなプログラムを組んだとしましょう。
B3がAですとIFは条件に合わないためEnd Ifに飛ぶので「Aの処理」と出力されるようにしています。
しかし、B3がA以外だと「Bの処理」と1回出力されるものの
その後の「Cells(3, 4) = “Aの処理”」を読み込んでしまい、結果的に「Aの処理」となってしまいます。
つまり、Bの処理の時は「Cells(3, 4) = “Aの処理”」を飛ばさなくてはなりません。
ここでGoToを使用してみましょう!
Elseを使えば解決するのですが、見本なので使ってみます。
つまり「Cells(3, 4) = “Bの処理”」
を読み込んだ後にEnd Subまで飛ばしましょう。
つまり下図のようになります。
Sub Gotoの使い方()
If Cells(3, 2) <> “A” Then
Cells(3, 4) = “Bの処理”
GoTo 1
End If
Cells(3, 4) = “Aの処理”
1:
End Sub
これにより「Bの処理」を打ち込んだ後にEnd Subに飛ぶので
「Aの処理」で上書きすることはないです。
実行してもうまく機能してくれています。
・ループ中にプログラムを指定ラベル・位置まで飛ばす
さらにGoToはループ処理から抜け出すこともできます。
下記のようなプログラムがあったとします。
Sub ループから抜け出す()
Dim A As Long
For A = 1 To 100 Step 1
If Cells(A, 1) = “” Then
GoTo Loop終了
End IfCells(A, 2) = Cells(A, 1) * 2
Next A
Loop終了:
End Sub
A列に「2」をかけた数値をB列に算出するプログラムです。
見本では100行まで繰り返し実行するようになってますが、空白になったらプログラムを
終えるようにプログラミングしています。
仕組みとしてIFで条件分岐をしており、対象が空白なら
GoToで「Loop終了」に飛ぶようになってます。
「Loop終了」はEnd Subにつながっており、強制終了するようになってます。
■よくあるエラーと対処法
ではGOTOを使用して発生するエラーとそれに対する対処法を説明します。
・コンパイルエラー:行ラベルが定義されていません
こちらはGOTOに対しての移動先が存在しない場合に発生するエラーです。
たとえは「GoTo ABC」というプログラムに対し、「ABC:」という移動先が必要です。
このようなエラーが出た方は移動先が入力されているか確認してみてください。
・コンパイルエラー: 修正候補:行番号 または 行ラベル
このエラーが表示された方はGoToを入力した際に表示されたかと思います。
GoToには多少の規制がありますので下記にまとめました。
①変数名やプログラムで使用する用語
こちらも知らなければエラーの原因となります。
例えば変数で使用される「Variant」や「String」などの名前で作成している場合や
条件分岐で使用する「If」や繰り返しで使用する「For」などで名前を付けている場合は
エラーになってしまいます。
上記のような用語を使用したい場合は何でもいいので文字・数値を加えてください。
例えば「GoTo Variant」であれば「GoTo Varianpt123」のように
文字・数値を付け加えると使用できます。
②使用できない記号が含まれている
名前に使用できない記号も存在します。
「スペース」のほかに「@」「&」「#」などが含まれているとエラーになってしまいます。
私もすべて把握はしていませんが、エラーが発生した場合に
記号を含んでいる場合は取り除いてみてください。
■公式の説明
わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟
GoTo ステートメント (VBA) | Microsoft Docs
■まとめ
いかがだったでしょうか。
GoTOを使いこなせば処理方法を分岐できるようになり、
様々なパターンに対応できるようになります。
さらにはエラーが生じると指定位置まで飛ぶような方法もありますので
別の記事で説明したいと思います。
では次回の記事でお会いしましょう。記事はこちらから☟
【VBA知識 12】別のシートをアクティブ・選択する方法について ► 独学エクセル塾 (dokugakuexcel.com)