EXCEL VBA Goto ステートメント(行ラベル・行番号)指定ラベルへジャンプ
EXCEL VBA Goto ステートメント(行ラベル・行番号)指定ラベルへジャンプ
今回説明するのは、指定した行ラベル(指定場所)へ処理をジャンプする事が出来るGotoステートメントの利用方法を説明いたします。同じSubプロシージャ内なら
使用できますので、処理の流れを一気にジャンプしたい場合は、Gotoステートメントは、とても便利な機能です。しかし、多用する場合は、プログラムが複雑になりますので、注意が必要です、それでは、サンプルプログラムを交えて順番に説明いたします。
●【On Error Gotoの使い方については、下記の参照して下さい】
● Gotoステートメントを利用するには、下記の通りに設定を行います。
Goto Line
※Lineには、行ラベル又は、行番号を指定します。
【使用例】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
' ' Sub Goto00() 'Gotoの使い方 Dim A As Long A = InputBox("1~1000の間の数値を入力してください") If A <= 500 Then GoTo Jump02 '入力した数値が500以下の場合は、Jump02へ Else GoTo Jump01 '入力した数値が500を超える場合は、Jump01へ End If Jump01: Range("A1") = 500 'セルA1に500を代入 A = A - 500 'Aの値から500を引く Jump02: Range("A2") = A 'A値をセルA2へ代入 End Sub ’ |
【使用例の詳細説明】
※Gotoステートメントを利用した使用例です。IF文で500以下と500を超えるかで判定させます。ここで条件により、ジャンプ先が異なる場所へ飛びますが、Jump01に飛んだ場合は、Jump01とJump02共に実行されます。Jump02へ飛んだ場合は、Jump02のみ実行されます。このように、プログラム(コード)位置を飛ばすことにより、実行するプログラムを使い分ける事が出来ます。
【注意点】
・Gotoステートメントは、気軽にラベル先へジャンプする事ができますが、多用することによりプログラムが分かりにくくなります。また、ループの様に利用する場合は、永久ループにならない様に抜け出しの条件設定を忘れないでください。
Gotoステートメントを利用してデータを集計(Gotoでループ処理)
下記のサンプルプログラムは、Gotoステートメントを利用してデータを集計(Gotoでループ処理)を行うサンプルプログラムです。C列に給与所得としてデータが登録されています。このC列に登録されているデータを集計して、C列の最終行に合計値を記載します。ただし、C列には数値以外のデータも登録されているので、数値のみ集計されるようにIsNumericを利用しています。
【プログラムの流れ】
① C列のセルが空白セルでループから抜ける:Jump01へ
② C列のセルの値が数値が判定します。(文字の場合は、スキップ)
③ C列のセルの値が数値の場合は、数値を集計
④ ループから抜けて、集計値をC列の最終行に合計値として表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
' '''******** AKIRA55.COM ******* https://akira55.com/goto/ ' Sub Goto01() 'Gotoを利用したループ・データ集計 Dim I, Total As Long Total = 0 '合計値を0にする。 I = 1 Loop01: If Cells(I, "C") = "" Then GoTo Jump01 '空白セルでループから抜ける。 ElseIf IsNumeric(Cells(I, "C")) Then 'セルの値が数値が調べる。 Total = Total + Cells(I, "C") 'C列の数値セルを加算します。 End If I = I + 1 '+1で行を加算します。 GoTo Loop01 'Gotoでループします。 Jump01: Cells(I, "B") = "合計" Cells(I, "C") = Total 'C列の最終行に合計値を表示 End Sub ' |
(画面クリックして拡大)
Gotoステートメントを利用して条件に応じてジャンプ(行ラベルを実行)
下記のサンプルプログラムは、Gotoステートメントを利用して条件に応じて、各行ラベルへジャンプし各処理を実行するサンプルプログラムです。下記のサンプルプログラムは、ランダムで数値(1~5)を生成して、生成した数値に応じて行ラベルにジャンプするサンプルプログラムです。ランダムの数値に応じで、おみくじの結果を表示します。
【プログラムの流れ】
① 数値をランダムで生成(1~5)
② 生成された数値に応じてジャンプします。(行ラベルへジャンプ)
③ ジャンプ先に応じておみくじメッセージを表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
' '''******** AKIRA55.COM ******* https://akira55.com/goto/ ' Sub Goto02() 'Gotoを利用して条件によりジャンプする。 Dim RND_int As Integer RND_int = WorksheetFunction.RandBetween(1, 5) '1~5の数字をランダム発生します。 Select Case RND_int Case Is = 1 GoTo RND1: '1の場合は、RND1へジャンプ Case Is = 2 GoTo RND2: '2の場合は、RND2へジャンプ Case Is = 3 GoTo RND3: '3の場合は、RND3へジャンプ Case Is = 4 GoTo RND4: '4の場合は、RND4へジャンプ Case Is = 5 GoTo RND5: '5の場合は、RND5へジャンプ End Select RND1: MsgBox "おめてどう大吉です。" 'メッセージボックスで表示し終了 Exit Sub RND2: MsgBox "欲しい中吉です。" 'メッセージボックスで表示し終了 Exit Sub RND3: MsgBox "まあまあ小吉です。" 'メッセージボックスで表示し終了 Exit Sub RND4: MsgBox "次回にチャンス吉です。" 'メッセージボックスで表示し終了 Exit Sub RND5: MsgBox "残念ながら凶です。" 'メッセージボックスで表示し終了 Exit Sub End Sub ' |
(画面クリックして拡大)
Gotoステートメントを利用して複数(4種類)の処理プログラムを複数条件(15種類)に応じてジャンプ(行ラベルを実行)
下記のサンプルプログラムは、Gotoステートメントを利用して複数(4種類)の処理プログラムを複数条件(15種類)に応じてジャンプするサンプルプログラムです。複数のプログラムを実行する際は、CALLを利用した方が便利ですが、Gotoステートメントでサンプルプログラムを作成してみました。
【プログラム詳細説明】
・4種類の処理①~④プログラムがあります。
・1~15までの数値に応じで、4種類の実行するプログラムを使い分けます。
例として15は、処理①~④を実行 8は、処理④のみ実行 3は、処理①②を実行します。
【プログラムの流れ】
① メッセージボックスが表示されて1~15までの数値を入力します。
※入力した数値に応じで、処理①~④の実行するプログラムが異なります。
② メッセージボックスに入力した数字が1~15以外の場合は、プログラム終了
③ 入力された数値により、処理①~④が実行されます。
④ 処理①~④が実行されます。入力された数値に応じて処理内容は、異なります。
⑤ ワークシート処理結果が表示され①へジャンプします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
' '''******** AKIRA55.COM ******* https://akira55.com/goto/ ' Sub Goto03() 'Gotoを利用して4種類の処理と15種類の複数条件によりジャンプする。 Dim Bit_int As Integer Start: Range("A2:A5").Clear 'A2~A5の範囲の文字列・背景色をクリアー Bit_int = InputBox("1~15の間の数値を入力してください") If Bit_int < 1 Or Bit_int > 15 Then GoTo End_Bit End If Top: Select Case Bit_int Case Is >= 8 GoTo Bit4: '8以上の場合は、Bit4へジャンプ Case Is >= 4 GoTo Bit3: '4以上の場合は、Bit3へジャンプ Case Is >= 2 GoTo Bit2: '2以上場合は、Bit2へジャンプ Case Is = 1 GoTo Bit1: '1の場合は、Bit1へジャンプ End Select MsgBox "発行処理されました" GoTo Start: Bit1: '処理① Range("A2") = "Gotoトラベル" ' Range("A2").Interior.ColorIndex = 4 Bit_int = Bit_int - 1 GoTo Top: Bit2: '処理② Range("A3") = "Gotoイート" ' Range("A3").Interior.ColorIndex = 8 Bit_int = Bit_int - 2 GoTo Top: Bit3: '処理③ Range("A4") = "Gotoキャンペーン" ' Range("A4").Interior.ColorIndex = 17 Bit_int = Bit_int - 4 GoTo Top: Bit4: '処理④ Range("A5") = "Goto地域共通クーポン" ' Range("A5").Interior.ColorIndex = 40 Bit_int = Bit_int - 8 GoTo Top: End_Bit: MsgBox "入力した数値の範囲が1~15の範囲外です。" End Sub ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。