教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について説明していきます。

【ExcelVBA 構文】GoTo文(処理を途中でスキップ)の使い方を知りたいです。教えて!

       f:id:m_kbou:20200417211910p:plain

処理を途中でスキップさせたい場合は、GoTo文を使用します。スキップさせる先は同プロシージャ内で指定したラベル先となります。具体的な使い方について説明します。

 

【目次】

 

構文

記述方法は、以下の通りとなります。

GoTo文の記述方法

=======================================================================

GoTo[ラベル名]

[ラベル名:]

=======================================================================

[説明]:

処理をスキップさせるには「GoTo[ラベル名]」と記述します。[ラベル名]にはスキップさせる先のラベル名を記述します。[ラベル名:]には上記[ラベル名]からスキップする先を記述します。内容を纏めると、「[ラベル名]が指定された場所から[ラベル名:]で指定した場所まで処理をスキップさせて下さい。」との意味になります。

[記述例]:

GoTo 次データ

 

使い方

使い方について、具体的に説明していきます。

基本的な使い方

基本的な使い方について説明します。

[画面]:

f:id:m_kbou:20190529134015p:plain

※<実行>ボタンには、以下の記述例サンプルプロシージャが登録されています。

[記述例]:

※以下の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方については、VBEの開き方を参考にして下さい。

-------------------------------------------------

Sub サンプル()

    Select Case Range("A2")
        '80以上の場合
        Case Is >= 80
            GoTo 合格
        '60以上80未満の場合
        Case Is > 60
            GoTo 補欠合格
        '上記以外の場合
        Case Else
            GoTo 不合格
    End Select

合格:
    MsgBox "合格"
    Exit Sub

補欠合格:
    MsgBox "補欠合格"
    Exit Sub

不合格:
    MsgBox "不合格"
    Exit Sub

End Sub

-------------------------------------------------

Select文を使用した判定処理となります。内容は「A2セルの値が80以上であれば合格ラベルにスキップして”合格”を、60以上80未満であれば補欠合格ラベルにスキップして”補欠合格”を、60未満であれば不合格ラベルにスキップして”不合格”をMsgBoxで表示して下さい。」との意味になります。

[実行例]:

※A2セルに入力されている数値が65のため、60以上80未満の条件に一致する事から”補欠合格”が表示されました。

f:id:m_kbou:20190529134032p:plain

基本的な使い方についての説明は以上です。

 

ループ処理と組み合わせた使い方 

ループ処理と組み合わせた使い方について説明します。

[記述例]:

※以下の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方については、VBEの開き方を参考にして下さい。

-------------------------------------------------

Sub サンプル()

    '↓処理①
    Dim 番号 As Double
   
    '↓処理②
    For 番号 = 1 To 5
        '↓処理③
        If (番号 = 3) Then
            GoTo 次データ
        Else
            MsgBox 番号
        End If
次データ:
    Next

End Sub

-------------------------------------------------

処理の流れは以下の通りとなります。

[処理①]:変数定義
Dimによる変数の定義となります。

[処理②]:For~Next文によるループ処理
For~Next文を使用して変数:番号に1~5の値を順次セットし、処理を5回実行します。

[処理③]:IF文による条件判断
実行する中で、変数:番号にセットされた値をMsgBoxで表示させます。1回目の処理では変数:番号に1がセットされるため「1」が表示されます。2回目の処理では変数:番号に2がセットされるため「2」が表示されます。3回目の処理では変数:番号に3がセットされますが、IF文での条件一致による次データラベルへのスキップとなるため何も表示されません。4回目の処理では変数:番号に4がセットされるため「4」が表示されます。5回目の処理では変数:番号に5がセットされるため「5」が表示されます。

[実行例]:

f:id:m_kbou:20190529134051p:plain

f:id:m_kbou:20190529134058p:plain

f:id:m_kbou:20190529134110p:plain

f:id:m_kbou:20190529134118p:plain

ループ処理と組み合わせた使い方についての説明は以上です。

 

おわりに

GoTo文を多用すると処理がどこに行っているか分からなくなります。できるだけ用途を明確にし、限定して使用するように心掛けて下さい。