調べたいExcel-VBAの使用例などキーワードを入力してください

VBAでセル移動しても表示位置を常に左上端に設定する

ウィンドウの操作画面の操作
ウィンドウの操作
スポンサーリンク

ユーザーフォームに配置したコマンドボタンを押したら、指定したセルに瞬間移動(ジャンプ)させる事ありませんか?

イメージではセルA1の位置(画面左上端)にジャンプしたセルがこの位置にくれば、移動先の表やリストが見やすくなるはずなのに、中途半端な位置で表示されてしまった経験ありませんか?

Excel-VBAを使う方はひとつのシートをちょっとだけ使うのではなく、かなり広範囲を使う方が多いはずなので、ジャンプ先のセルが常に画面左上端に正確に移動させましょう。

スポンサーリンク

ScrollRowとScrollColumnを使う

Excel-VBAを使う前までは、セルの移動といえばスクロールバーをマウスで操作するので、おおよそ表示画面の範囲内のセルを使用するのが一般的ですね。

Excel-VBAでコマンドボタンを使えば、セルの移動も一発でジャンプしてくれるのでひとつのシートを、セル列番号A~ZどころかA~EZまで使うなど広範囲で使うことが容易になりますね。

初心者の頃のジャンプ失敗例

エクセルVBAを覚えたての頃によくやりがちな失敗例として、例えば、セルBH100へジャンプさせるのに書いたVBAコードをこのように書いていませんか?

セル番号だけのジャンプするVBAコード

Private Sub CommandButton1_Click()
Range(“BH100”).Select
End Sub

VBA解説
  1. コマンドボタン1が押されたら
  2. セルBH100を選択する
  3. マクロ記録終了

移動させたい気持ちはよくわかるVBAコードですよね。

これでは、ただ単にBH100へ移動するだけなので、イメージでは画面左上端に移動させたつもりですが、大体の場合は画面中央になることが多いですよね。

セル番号だけのジャンプ
セル番号だけでは画面左上には表示されない

確かにセルBH100を選択されていますが、それ以上のVBAコードがないので画面左上を選択するなんて無理なんです。

行番号と列番号を付け加えると解決するが・・・

選択するセル番号に加えて、シート名やセルの元々の位置や行番号・列番号など、細かな情報をVBAコードで付け加えてみるとこのようになりました。

細かく付け加えたVBAコード

Private Sub CommandButton1_Click()
シート名 = “sheet2”
Worksheets(シート名).Activate
Range(“A1”).Select
行番号 = 100
ActiveWindow.ScrollRow = 行番号
列番号 = 60
ActiveWindow.ScrollColumn = 列番号
Sheets(“sheet2”).Select
Range(“BH100”).Select
End Sub

VBA解説
  1. コマンドボタン1を押されたら
  2. シートはsheet2を選ぶ
  3. セルA1を選ぶ
  4. 100行移動する
  5. 60列移動する
  6. sheet2を選択する
  7. セルBH100を選択する
  8. マクロ終了

ここまで細かくVBAコードを書いたら、問題なく画面左上端にジャンプできるようになりましたが・・・

現在は使えない!

このVBAコードでエクセル2007を使っている時は、なんの問題もなかったのですがエクセル2010以降は使えなくなった。

もちろん動作確認しているエクセル2016でも使えません。

コンバイルエラー
コンバイルエラー

エクセル2010が発売された当時は、当然ながらほとんどのエクセルファイルは2007で作成されているので、エラーのオンパレードでした。

エクセル2010以降のジャンプ方法

そしてすぐには解決方法もわからず、苦労しましたのでいろいろ試してみたのが、通常日本語使うときは「”日本語”」ってコード書いているのに、ここでは””がないからと思って、日本語の部分に””つけてみましたがダメでした。

しばらくすると同じようなエラーで悩む人が多くなり、解決方法が分かってきたのが、下記のように日本語表記をしないコードです。

日本語表示をしないVBAコード

Private Sub CommandButton1_Click()
Sheets(“sheet2”).Select
Range(“A1”).Select
With ActiveWindow
.ScrollRow = 100
.ScrollColumn = 60
End With
Sheets(“sheet2”).Select
Range(“BH100”).Select
End Sub

日本語の代わりにWithステートメントを使う事で代用できることが分かりましたので、この方法で解決しています。

ボタン1つで作業完了へ
ちょっとの工夫でエクセル作業が飛躍的に早く終わったらいいなあ~と思いませんか? 面倒くさい作業よ!さようなら!

スポンサーリンク


画面の操作
参考になりましたらシェア宜しくお願い致します

山頂テラスデッキからの三段紅葉(2019年11月)

フリーパスって助成金つぎ込んでいいの?

コロナ禍のGo To トラベル以外にも助成金だらけでうらやましいね。

安くなったフリーパスで遊びに行きたいけど、給与も減って余裕ないよね。

Excel VBA