【VBA】Gotoメソッドで指定セルにジャンプ

 今回は市販の参考書によっては完全に無視されてしまうこともある VBA の Gotoメソッド について解説します。Gotoメソッドは 指定したセル範囲を選択する という機能をもちます。んん? 誰ですか?
「だったら、Selectメソッドを使えばいいじゃん」
「こんなマイナーなメソッド、別にいらないじゃん」
とか言ってる人は? まあ実のところ、こばとも最初はそう思っちゃいました。でも、よくよく調べてみると、Selectメソッドとは少し違った機能があることがわかったのです。目的によっては、Goto を使ったほうが良い場合もあるのです。

【VBA】Gotoメソッド

 Gotoメソッドは Applicationオブジェクトのメソッド です。
 このメソッドを使うときは

Application.Goto セル範囲 [,スクロール]

という形式で記述します。オプション引数 [スクロール] を指定するときは、True もしくは False です(省略すると False です)。さっそく簡単なマクロで試してみましう。

'[VBA] セルE10にジャンプ♪
Sub Goto_Range_1()
   Application.Goto Range("E10")
End Sub

 Goto_Range_1() を実行すると、セル E10 が選択されます。

 VBA Gotoメソッドを使ったプログラム① 指定セルに移動

 まあ、これだけなら Select メソッドと大差ないのですが、注目すべきは Gotoメソッドのオプション引数 [スクロール] です。この引数を True にしてみましょう。

'[VBA] セルE10にジャンプ&スクロール♪
Sub Goto_Range_2()
   Application.Goto Range("E10"), True
End Sub

 Goto_Range_2() を実行すると …

 VBA Gotoメソッドを使ったプログラム② 指定セルが左上端にスクロール

 セル E10 が左上隅に表示されました。このように、Gotoメソッドは移動先のセルが左上端に表示されるように自動的にスクロールされるのです。これは Selectメソッドにはなかった Goto ならではのスペシャルな機能なのです。しかし違いはこれだけではありません。別のシートのセルを選択するときの記述の仕方に、ちょっとした違いがあるのです。
 
 今度は現在アクティブになっていないシートへ移動することを考えてみます。まず最初に Select メソッドを使ってみます。Select でよくやる間違いは次のようなコードです。

'[VBA] このマクロは機能しません
Sub Select_Range_Test()
   Worksheets("Sheet2").Range("E10").Select
End Sub

 まったく正しいコードに見えますが、このマクロは動きません。
 Selectメソッドを使うなら、2行使って書く必要があります。

'[VBA] Sheet2セルE10にジャンプ♪
Sub Select_Range()
   Worksheets("Sheet2").Select
   Range("E10").Select
End Sub

 ところが、Gotoメソッドを使うと、これが1行ですむのです:

'[VBA] Sheet2のセルE10にジャンプ♪
Sub Goto_Range_3()
   Application.Goto Worksheets("Sheet2").Range("E10")
End Sub

 たかが1行、されど1行です。
 1行を笑う者は、1行に泣くのです。
 おおっと。良いこと言いましたね。
 久しぶりにこばとの VBA 名言が出ましたね。
 自分で言って、自分で感心しちゃった。
 メモしておこうっと …
 何ですか? その呆れかえった表情は?
 今回はこれでおしまいです。

コメント

タイトルとURLをコピーしました