VBAでセル移動しても表示位置を常に左上端に設定する
ユーザーフォームに配置したコマンドボタンを押したら、指定したセルに瞬間移動(ジャンプ)させる事ありませんか?
イメージではセルA1の位置(画面左上端)にジャンプしたセルがこの位置にくれば、移動先の表やリストが見やすくなるはずなのに、中途半端な位置で表示されてしまった経験ありませんか?
Excel-VBAを使う方はひとつのシートをちょっとだけ使うのではなく、かなり広範囲を使う方が多いはずなので、ジャンプ先のセルが常に画面左上端に正確に移動させましょう。
ScrollRowとScrollColumnを使う
Excel-VBAを使う前までは、セルの移動といえばスクロールバーをマウスで操作するので、おおよそ表示画面の範囲内のセルを使用するのが一般的ですね。
Excel-VBAでコマンドボタンを使えば、セルの移動も一発でジャンプしてくれるのでひとつのシートを、セル列番号A~ZどころかA~EZまで使うなど広範囲で使うことが容易になりますね。
初心者の頃のジャンプ失敗例
エクセルVBAを覚えたての頃によくやりがちな失敗例として、例えば、セルBH100へジャンプさせるのに書いたVBAコードをこのように書いていませんか?
移動させたい気持ちはよくわかるVBAコードですよね。
これでは、ただ単にBH100へ移動するだけなので、イメージでは画面左上端に移動させたつもりですが、大体の場合は画面中央になることが多いですよね。
確かにセルBH100を選択されていますが、それ以上のVBAコードがないので画面左上を選択するなんて無理なんです。
行番号と列番号を付け加えると解決するが・・・
選択するセル番号に加えて、シート名やセルの元々の位置や行番号・列番号など、細かな情報をVBAコードで付け加えてみるとこのようになりました。
ここまで細かくVBAコードを書いたら、問題なく画面左上端にジャンプできるようになりましたが・・・
エクセル2010が発売された当時は、当然ながらほとんどのエクセルファイルは2007で作成されているので、エラーのオンパレードでした。
エクセル2010以降のジャンプ方法
そしてすぐには解決方法もわからず、苦労しましたのでいろいろ試してみたのが、通常日本語使うときは「”日本語”」ってコード書いているのに、ここでは””がないからと思って、日本語の部分に””つけてみましたがダメでした。
しばらくすると同じようなエラーで悩む人が多くなり、解決方法が分かってきたのが、下記のように日本語表記をしないコードです。
日本語の代わりにWithステートメントを使う事で代用できることが分かりましたので、この方法で解決しています。