【VBA】GoTo文で処理を指定の場所へ飛ばす|サンプルコードあり

Excel VBAでプログラミングを行う際、特定の場所へ処理を飛ばす必要が出てくることがあります。そのような場合に使用するのがGoTo文です。この記事では、GoTo文の基本的な使い方から、ループをスキップする方法、エラー処理に至るまで、網羅的に解説します。初心者から中級者まで、GoTo文の使い方を理解し、効率的なプログラミングを目指しましょう。

目次

GoTo文の基本

GoTo文とは?

GoTo文は、プログラムの処理を特定のラベルに飛ばすVBAの命令です。この命令を使うことで、コードの特定の部分を実行した後に、別の場所へ処理を移動することができます。

GoTo文の書き方とラベルの定義

GoTo文の基本的な書き方は非常にシンプルです。以下のように、GoToに続けてラベル名を記述します。

GoTo ラベル名

このGoTo文が実行されると、指定したラベル名の位置に処理が飛びます。ラベルは次のように定義します。

ラベル名:

サンプルコード1:基本的な使い方

以下は、GoTo文を使用した非常に基本的なサンプルコードです。

Sub SimpleGoToExample()
    GoTo Destination
    Debug.Print "This line will not be executed."
Destination:
    Debug.Print "Arrived at Destination."
End Sub

このコードを実行すると、”Arrived at Destination.”という文字列が出力されます。”This line will not be executed.”という部分は、GoTo文によってスキップされるため、出力されません。

注意点として覚えておくべきこと

  • ラベルを定義し忘れると、「エラー 行ラベルが定義されていません」というエラーメッセージが表示されます。
  • GoTo文は、同じサブプロシージャまたは関数内でのみ有効です。別のサブプロシージャや関数には飛べません。
設定項目説明
ラベル名移動先となるラベルを指定します。
GoTo文ラベルに移動するための命令です。

ループをスキップする(Continue)

ループスキップの必要性

プログラムには繰り返し処理がよく登場しますが、その中で特定の条件に一致した場合に、その回のループだけをスキップしたいという状況があります。例えば、1から10までの数字を出力するプログラムで、偶数だけをスキップしたい場合などです。

サンプルコード2:ループをスキップする

以下のサンプルコードでは、Forループを使用して1から5までの数字を出力していますが、偶数の場合はスキップしています。

Dim counter As Integer
For counter = 1 To 5
    If counter Mod 2 = 0 Then
        GoTo SkipLoop
    End If
    Debug.Print counter
SkipLoop:
Next counter

このコードを実行すると、”1″, “3”, “5”という数字が出力されます。偶数(”2″と”4″)はGoTo文によってスキップされています。

エラー処理とGoTo文

エラー処理の重要性

プログラムがエラーを起こす可能性は常にあります。そのような状況で適切なエラー処理ができなければ、プログラムは予期せぬ動作をするか、最悪の場合、クラッシュしてしまいます。

サンプルコード3:エラー処理の例

以下のサンプルコードでは、On Error GoTo文を使用してエラー処理を行っています。

Sub ErrorHandlingExample()
    On Error GoTo ErrorHandler
    Dim x As Integer
    x = "This is an error."
    Exit Sub
ErrorHandler:
    Debug.Print "An error has occurred."
End Sub

このコードを実行すると、”An error has occurred.”というエラーメッセージが出力されます。これは、GoTo文がエラーハンドリングにも使用できることを示しています。

FAQ

Q:GoTo文とは何ですか?

A:GoTo文は、Excel VBA(Visual Basic for Applications)などのプログラミング言語で使用される制御文の一つです。この文を使用すると、プログラムの処理を指定したラベルに飛ばすことができます。これにより、特定の処理をスキップしたり、エラーハンドリングを行ったりすることが可能です。

Q:GoTo文はどのように書きますか?

A:GoTo文は非常にシンプルな構文で書かれます。基本的な形式はGoTo ラベル名です。ここで「ラベル名」は、プログラム内で一意に定義された名前で、そのラベルが指す場所に処理が飛びます。

Q:GoTo文の使用は推奨されていますか?

A:GoTo文の使用は一般的には推奨されていません。これは、GoTo文を使いすぎるとプログラムが読みにくく、保守が困難になる可能性があるからです。ただし、特定のケース(例えば、エラーハンドリング)での使用は許容されています。

Q:GoTo文でエラーハンドリングは可能ですか?

A:はい、GoTo文はエラーハンドリングにも使用されます。On Error GoTo ラベル名という形で書くことで、エラーが発生した場合に指定したラベルに処理を飛ばすことができます。

Q:GoTo文はループ内で使えますか?

A:はい、GoTo文はループ内で使うことができます。特定の条件下でループをスキップしたい場合などに使用されます。ただし、このような用途でのGoTo文の使用は、他の制御文で代替可能な場合が多いです。

Q:GoTo文の代わりに何が使えますか?

A:GoTo文の代わりには、If文、For文、While文、Select Case文などの制御文があります。これらの制御文を使うことで、より構造化されたプログラムを書くことができます。

Q:GoTo文で飛べる範囲はどれくらいですか?

A:GoTo文で飛べる範囲は、同じサブプロシージャまたは関数内です。つまり、一つのサブプロシージャから別のサブプロシージャに飛ぶことはできません。

Q:GoTo文で複数のラベルに飛ぶことはできますか?

A:はい、一つのサブプロシージャまたは関数内であれば、複数のラベルに飛ぶことができます。ただし、それによってプログラムが複雑になる可能性があるため、注意が必要です。

Q:GoTo文を使ったプログラムはデバッグが難しいと言われますが、その理由は?

A:GoTo文を使うと、プログラムの流れが非線形になる可能性があります。その結果、どの処理がどの順番で実行されるのかが一見してわかりにくくなり、デバッグが難しくなることが多いです。

関連動画

まとめ

GoTo文は、プログラムの流れを自由にコントロールするための強力なツールです。しかし、その力を持つがゆえに、使い方を誤るとコードが非常に複雑になり、後で読み返したときに理解が難しくなる可能性があります。そのため、GoTo文は必要な場合、またはその機能が必要不可欠な場合にのみ使用するように心掛けましょう。この記事で解説した各ポイントとサンプルコードを参考に、GoTo文を効果的に活用してください。

Excelのショートカットキーの練習

当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。

下のスタートボタンを押して練習モードに入ります。
STARTSTOP
※入力モード切り替え ctrl + shift + alt + space
PRE
NEXT
現在の問題をリストから除外
除外したリストをリセット
現在の除外状況のURL取得
コピー
ガイドモード
リピートモード

※推奨ブラウザ Google Chrome

PUSH ENTER
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次