教えて!ExcelVBA!

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

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

f:id:m_kbou:20200417211910p:plain

ExcelVBAのコーディングをしている中で、処理を途中でスキップさせたい場合があります。その場合についてはGoTo文を使用する事になります。具体的には「ループ処理内のある条件の時にスキップしたい場合」や「エラー処理を行いたい場合」等で使用する事になります。このGoTo文の使い方について紹介します。

 

 

構文

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

GoTo文の記述方法

GoTo[ラベル名]

[ラベル名:]

[説明]:

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

[記述例]:

GoTo 次データ

 

使い方

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

基本的な使い方

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

[プログラミング例]:

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で表示して下さい。」との意味になります。

f:id:m_kbou:20210205155218p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。A2セルに65を入力して<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210226181154p:plain

②結果は以下の様に表示されます。MsgBoxで「補欠合格」が表示されます。(※A2セルに入力されている数値が65のため、60以上80未満の条件に一致する事から”補欠合格”が表示されました。)

f:id:m_kbou:20190529134032p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

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

 

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

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

[プログラミング例]:

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:20210205160628p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210226181602p:plain

②最初に以下の様に表示されます。MsgBoxで「1」が表示されます。

f:id:m_kbou:20190529134051p:plain

③次に以下の様に表示されます。MsgBoxで「2」が表示されます。

f:id:m_kbou:20190529134058p:plain

④次に以下の様に表示されます。MsgBoxで「4」が表示されます。

f:id:m_kbou:20190529134110p:plain

⑤最後に以下の様に表示されます。MsgBoxで「5」が表示されます。

f:id:m_kbou:20190529134118p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

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

 

おわりに

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