Excel VBAでセル範囲を選択する処理を書く際に、「別シート上のセルへ移動・選択したい」というケースは少なくありません。
しかしながら、Range(...).Select
はアクティブなシートにしか使用できないため、シートをまたいだ選択ではエラーになります。
この記事では、アクティブでないシート上のセルに確実に移動する方法として、Application.GoTo
を活用する方法をご紹介いたします。
目次
NG例:直接の .Select
は失敗する
Worksheets("入力シート").Range("C3:F12").Select '← アクティブシートでないとエラー
このように、Worksheets("入力シート")
がアクティブでない状態で .Select
を使うと、実行時エラーが発生してしまいます。
正しい方法:Application.GoTo を使って移動する
Application.GoTo Worksheets("入力シート").Range("C3:F12")
解説:
Application.GoTo
は、アクティブシートに関係なく任意のセルや範囲にフォーカスを移動できるメソッドです。- 上記のコードでは、“入力シート” の C3:F12 の範囲へジャンプして選択状態にします。
- 自動的に対象のシートがアクティブになり、指定セル範囲が選択されます。
応用:選択後の処理を続ける
With Worksheets("入力シート")
Application.GoTo .Range("C3:F12")
.Range("C3:F12").Interior.Color = RGB(255, 255, 200)
End With
With
ブロックを使うことで、指定範囲に対して色を塗ったり、値を操作したりといった後続処理も明確に記述可能です。
注意点と補足
内容 | 説明 |
---|---|
.Select は使わない | 選択対象のシートがアクティブでない場合、.Select はエラーになります。 |
.GoTo はフォーカスを移動できる | Application.GoTo を使えば、シートをまたいだセル移動が可能です。 |
オプション引数あり | 第2引数に Scroll:=True を指定すると、スクロール位置も制御可能です。 |
使用シーンの例
- 特定のシート上の入力欄にジャンプさせる
- エラーセルを別シート上に表示させて補足説明を行う
- シート間で処理の起点を明示する
まとめ
処理内容 | コード例 | 備考 |
---|---|---|
シートをまたいでセルを選択 | Application.GoTo Worksheets("シート名").Range("セル範囲") | 安全にセルへ移動可能 |
.Select はNG | Worksheets(...).Range(...).Select | アクティブなシートでのみ使用可能 |
処理の継続 | .Range(...).Value や .Interior.Color などで装飾や値設定も可 |