以下の内容はhttps://www.limecode.jp/entry/difference/application-goto-range-selectより取得しました。


Application.GoToとRange.Selectの違い

Application.GoToメソッドと、
RangeオブジェクトのSelectメソッドの違いを解説します。

同じところ

どちらも現在の選択セルを変更する機能です。

Sheet1がアクティブの時、以下のコードは同じ動きになります。

Application.GoTo Worksheets("Sheet1").Range("A1")
Worksheets("Sheet1").Range("A1").Select

 

違うところ

Application.GoToの方が高機能(しかし不安定)で、以下の3つの機能を有します。

アクティブでないシートのセルを選択可能

アクティブでないシートのセルをSelectするとエラーになってしまいますが、
Application.GoToはアクティブシートの切り替えも同時に行ってくれます。


例えばSheet2をアクティブにしていると、
↓こちらのコードは「RangeクラスのSelectメソッドが失敗」エラーになります。

Worksheets("Sheet1").Range("A1").Select

 
しかしApplication.GoToを使った↓こちらのコードは、
Sheet1をアクティブにしたうえでA1セルを選択してくれます。

Application.GoTo Worksheets("Sheet1").Range("A1")

 

画面のスクロール機能

Application.GoToには引数「Scroll」があり、
これをTrueにすると指定セルが左上になるよう表示を切り替えてくれます。


Selectメソッドも「そのセルが表示される位置までスクロール」はしてくれるため、
「厳密に左上が選択セルになるようにスクロール」するかの違いになります。


この機能が活躍するのは「ウィンドウ枠の固定」が設定されている場合です。

ウィンドウ枠を固定中に固定エリアのセルを選択すると、
通常は固定していない部分はスクロールされません。

ウィンドウ枠の固定とApplication.GoTo

ここでApplication.GoToの引数ScrollをTrueにすれば、
これを最上部までスクロールすることができます。


ただしデメリットもあり、例えば通常のシートで普通にC3セルを選択する際、
ScrollをTrueにしていることこんな風に選択されてしまいます。
Application.GoToのScrollの仕様

例えすべてが1画面に収まるシートであっても、
A:B列、1:2行が表示されない位置になってしまう訳ですね。

「厳密に左上に表示」とはこういうことです。


引数Scrollは常にTrueにすればいいわけではないためご注意ください。

直前の選択セルを記憶

Application.Gotoには実行履歴を保持する機能が一応備わっていて、
Application.PreviousSelectionsプロパティから参照できます。


といいつつこの機能はあまり推奨できるものではなく、
「マウス操作は含まれないが名前ボックスの移動は含む」
など、ユーザーの操作に影響を受けてしまう機能です。


処理セルを記憶するためにわざわざGoToを使用する必要はありませんので、
素直に「Dim 直前の処理セル As Range」とした方が良いでしょう。

Application.GoToの不安定さ

ここまでApplication.GoToのメリットを説明してきましたが、
このメソッドはやや不安定なところがあります。

ScreenUpdating = False 下においてたまに実行されなかったりしますし、
大量の処理後に実行するとメモリ不足で止まったりもするようです。


直接Rangeオブジェクトをつかんで操作するSelectの方が安定しますので、
一応この点も留意しておいてください。

使いわけ

サッとマクロを書く場合はApplication.Gotoを使って楽をするのがよさそうです。


しかしながら

  • Application.GoToは不安定なところがあること
  • どのみちマクロの最後で1度しか実行しない処理であること

を考えると、しっかり作るマクロはSelectで書いた方がいいように思います。


Application.GoToが高機能と言っても、別にSelectメソッドを使って、

選択セル.Worksheet.Activate
選択セル.Select
ActiveWindow.ScrollRow = 1

こう書けば「別シートのセルを選択してスクロール」は可能ですからね。


このあたりはマクロの規模や好みによると思いますので、
状況に応じて使い分けてください。




以上の内容はhttps://www.limecode.jp/entry/difference/application-goto-range-selectより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14