VBAでセルの検索やジャンプ処理を行う際に、「いったん他のシートやセルに移動して、作業が終わったら元の場所に戻りたい」という場面は多くあります。
たとえば、入力値に対応する情報を別シートで探して表示し、その後入力位置に戻って編集を続けたい、というような用途です。
この記事では、VBAの Application.GoTo
を利用して、一時的に他セルへジャンプし、処理後に元の位置へ戻る方法をご紹介いたします。
目次
基本コード:元の位置を記録し、ジャンプ後に戻る
Sub JumpAndReturn()
Dim originCell As Range
Dim matchedCell As Range
' 元のセルを記録
Set originCell = ActiveCell
' 「商品」シートのC列で、元のセルの値を検索
Set matchedCell = Worksheets("商品").Columns("C").Find(What:=originCell.Value)
If Not matchedCell Is Nothing Then
' 見つかったセルへジャンプ
Application.GoTo matchedCell
' 任意の処理(例:メッセージ表示)
MsgBox "該当データ:" & matchedCell.Offset(0, 1).Value
' 元のセルに戻る
Application.GoTo originCell
Else
MsgBox "一致するデータが見つかりませんでした。"
End If
End Sub
コードのポイント
処理 | 内容 |
---|---|
Set originCell = ActiveCell | 現在選択されているセルを記録しておきます。 |
Find 関数 | 検索対象のシート(例:「商品」)で、特定の列から一致する値を探します。 |
Application.GoTo matchedCell | 見つかったセルに一時的にジャンプします。 |
Application.GoTo originCell | 元のセルに戻ります。 |
応用:シートをまたいで戻ることも可能
この方法はシートをまたぐ移動にも対応しており、以下のような用途に役立ちます。
- 入力セルに応じてマスタシートを検索
- 顧客IDに紐づく詳細情報を別シートで参照
- 検索結果を確認後、自動的に元の入力欄へ復帰
注意点と補足
項目 | 内容 |
---|---|
ActiveCell の保存は必須 | 移動前に必ず現在位置を記録してください。 |
.Find の対象範囲に注意 | 列指定で範囲を絞ると処理が早くなります(例:Columns("C") )。 |
一致しない場合の処理 | If Not matchedCell Is Nothing Then で適切に分岐を設けてください。 |
使用シーンの例
- 入力値に対応するマスタデータの参照と復帰
- エラー発生位置から対応情報へ移動し、修正後に元に戻る
- ジャンプ処理付きナビゲーションボタンの実装
まとめ
操作 | 方法 |
---|---|
元のセルを記録 | Set originCell = ActiveCell |
別セルへジャンプ | Application.GoTo matchedCell |
元に戻る | Application.GoTo originCell |
シートをまたぐ対応 | どのシートでも有効(範囲は明示的に指定) |
このように、Application.GoTo
を使えば、一時的なジャンプと元位置への復帰を簡単に実現できます。
マスタ検索や確認処理の流れをスムーズにし、作業効率を高めたい場面で非常に有用です。