セル選択+スクロールには2通り方法がある

セルの選択とスクロール、というと一般的にはApplication.Gotoメソッドが紹介されると思います。

しかし、同様のことを別の書き方で実現することが出来ます。ちなみに私はこちらで書きます。

どちらの場合も非表示シートを選択した場合はエラー1004が発生しますので指定シートが表示されているかチェックするなどのエラー対応は行う必要があります。


Application.Gotoメソッド

あるシートのあるセルを選択する場合にApplication.Gotoメソッドで書くことができます。

Application.Gotoメソッドには引数が2つあります。

1番目の引数:Reference

移動先シートと移動先セルを指定します。

この引数を省略した場合は直前にApplication.Gotoメソッドで移動したセル範囲が設定されたとみなされます。

2番目の引数:Scroll

移動先のセルが画面上の左上になるようにスクロールするかしないかを設定します。

Trueの場合はスクロールし、Falseまたは省略した場合はスクロールしません。

Application.Gotoのコード例

以下のコードは1番目のシートのB2セルを選択し、B2セルを画面上の左上に表示するようにしています。



Application.Gotoメソッドを使わない方法

Application.Gotoメソッドを使わずに他のシートのあるセルを選択した上でスクロールを行う場合、処理をいくつかに分けて実現ます。

上で書いたApplication.Gotoと同じ処理を行うコードが以下になります。

2行目で対象シートを選択し、3行目で選択したシートの対象セルを選択します。

4行目と5行目でスクロール位置を指定します。



Application.Gotoメソッドを使わない理由

上記の通り、セル選択+スクロールには2通りの方法がありますが、私はApplication.Gotoメソッドは使いません。

理由は2つあります。

スクロール先を選択できない

Application.Gotoメソッドはスクロール先を指定することができません。選択セルと同じ位置になります。

しかし実際にスクロールして表示位置を決める場合は、左上に表示させたいセルと選択セルは別であることが多いです。

そのため、Application.Gotoメソッドを採用しません。

Gotoという名前がおかしい

これはもう完全に個人的な主観ですが、「Goto」という名前が嫌です。

「Application.Goto」という書き方が長くてイヤ、というのがありますが、本当に「Goto」という名前はおかしいだろっ?って思います。

一応ですが、「Goto」と4文字で書くと構文エラーになります。必ずApplicationオブジェクトを書かなければなりません。エラー処理用のGotoキーワードとの判別が出来なくなるためでしょう。

そもそもなんでエラー処理としてキーワード登録されているGotoと同じ名前にしたのか全く理解できません。「Scroll」のような分かりやすい名前はあると思います。

一般的にプログラミング言語での「Goto」というのはコードのジャンプの意味合いが強いのです。それが「処理結果として移動します」という意味で使われていることがどうにも気持ち悪いです。

もう、これが圧倒的な理由で私はApplication.Gotoメソッドは使いません。