HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > 別シートのセルにジャンプする

即効テクニック

セル操作関連のテクニック

別シートのセルにジャンプする

(Excel 97/2000/2002/2003/2007)

VBAでは、一見正しいようなコードがエラーになることもあります。 たとえば、アクティブシートがSheet1の状態で次のマクロを実行するとアクティブシートがSheet2に切り替わり、アクティブセルがセルB3になります。

Sub Sample1()
  Sheets("Sheet2").Select
  Range("B3").Select
End Sub   
とても基本的なコードです。解説するまでもないでしょう。 ところが、これと同じ動作をさせようと、次のように書いたらどうでしょう。
Sub Sample2()
  Sheets("Sheet2").Range("B3").Select
End Sub   
実行するとエラーになります。 エラーメッセージは「RangeクラスのSelectメソッドが失敗しました」です。 失敗しましたって言われても、何が原因で失敗したのかがわかりません。 Sheets("Sheet2").Range("B3") = 100 のようなコードは問題なく実行できますので、セルの指定方法は間違っていないはずです。 実はVBAでは、アクティブでないシートのセルを直接Selectできないんです。 これは、そういう仕様なのですから、素直に2行で書けば済む話です。 もっとも、方法がないわけではありません。 アクティブでないシートのセルを一発で選択するには、ApplicationオブジェクトのGotoメソッドを使います。
Sub Sample3()
  Application.Goto Sheets("Sheet2").Range("B3")
End Sub   
このGotoメソッドは、少し変わった使い方ができます。 引数に渡すジャンプ先には、セルを表すRangeオブジェクトだけでなく、VBEで作成したプロシージャ名も指定できます。
Sub Sample4()
  Application.Goto "Sample5"
End Sub   
を実行すれば、同じモジュール内のプロシージャSample5にカーソルが移動します。 また、
Sub Sample4()
  Application.Goto "Module2.Sample5"
End Sub   
のようにモジュール名を指定することも可能です。