セル選択+スクロールには2通り方法がある
セルの選択とスクロール、というと一般的にはApplication.Gotoメソッドが紹介されると思います。
しかし、同様のことを別の書き方で実現することが出来ます。ちなみに私はこちらで書きます。
どちらの場合も非表示シートを選択した場合はエラー1004が発生しますので指定シートが表示されているかチェックするなどのエラー対応は行う必要があります。
Application.Gotoメソッド
あるシートのあるセルを選択する場合にApplication.Gotoメソッドで書くことができます。
Application.Gotoメソッドには引数が2つあります。
1番目の引数:Reference
移動先シートと移動先セルを指定します。
この引数を省略した場合は直前にApplication.Gotoメソッドで移動したセル範囲が設定されたとみなされます。
2番目の引数:Scroll
移動先のセルが画面上の左上になるようにスクロールするかしないかを設定します。
Trueの場合はスクロールし、Falseまたは省略した場合はスクロールしません。
Application.Gotoのコード例
以下のコードは1番目のシートのB2セルを選択し、B2セルを画面上の左上に表示するようにしています。
1 2 3 |
Sub ApplicationGotoTest() Call Application.Goto(Sheets(1).Range("B2"), True) End Sub |
Application.Gotoメソッドを使わない方法
Application.Gotoメソッドを使わずに他のシートのあるセルを選択した上でスクロールを行う場合、処理をいくつかに分けて実現ます。
上で書いたApplication.Gotoと同じ処理を行うコードが以下になります。
2行目で対象シートを選択し、3行目で選択したシートの対象セルを選択します。
4行目と5行目でスクロール位置を指定します。
1 2 3 4 5 6 |
Sub SheetCellSelectTest() Sheets(1).Select ActiveSheet.Range("B2").Select ActiveWindow.ScrollRow = 2 ActiveWindow.ScrollColumn = 2 End Sub |
Application.Gotoメソッドを使わない理由
上記の通り、セル選択+スクロールには2通りの方法がありますが、私はApplication.Gotoメソッドは使いません。
理由は2つあります。
スクロール先を選択できない
Application.Gotoメソッドはスクロール先を指定することができません。選択セルと同じ位置になります。
しかし実際にスクロールして表示位置を決める場合は、左上に表示させたいセルと選択セルは別であることが多いです。
そのため、Application.Gotoメソッドを採用しません。
Gotoという名前がおかしい
これはもう完全に個人的な主観ですが、「Goto」という名前が嫌です。
「Application.Goto」という書き方が長くてイヤ、というのがありますが、本当に「Goto」という名前はおかしいだろっ?って思います。
一応ですが、「Goto」と4文字で書くと構文エラーになります。必ずApplicationオブジェクトを書かなければなりません。エラー処理用のGotoキーワードとの判別が出来なくなるためでしょう。
そもそもなんでエラー処理としてキーワード登録されているGotoと同じ名前にしたのか全く理解できません。「Scroll」のような分かりやすい名前はあると思います。
一般的にプログラミング言語での「Goto」というのはコードのジャンプの意味合いが強いのです。それが「処理結果として移動します」という意味で使われていることがどうにも気持ち悪いです。
もう、これが圧倒的な理由で私はApplication.Gotoメソッドは使いません。