画面の左上のセルを移動しても常に表示する方法

Excel-VBA ウィンドウ操作

スポンサーリンク


波乗りアヒル
波乗りアヒル

コマンドボタンでセルの移動をしたらヘンな位置で表示されたことありませんか?

表示画面の左上のセルを指定したつもりなのに・・・

Excel-VBAを使う方はひとつのシートをちょっとだけ使うのではなく、かなり広範囲を使う方が多いはずです。

そうなるとジャンプしたセルが常に画面左上になる事を前提に、ジャンプさせてますよね。

波乗りアヒル
波乗りアヒル

それを解決する方法は、コマンドボタンにセル番号だけではなく、移動するセルの数も入れてあげれば解決しますよ

スポンサーリンク


スポンサーリンク

ScrollRowとScrollColumnを付け加える

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

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

波乗りアヒル
波乗りアヒル

セル列番号A~ZどころかA~EZまで使うことも頻繁にあります。

VBA覚えたての頃、こんな失敗しませんでしたか?

コマンドボタンを押すとセルBH100へジャンプさせるのに、こんなVBAコードで済ませてしまいました。

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

だいたい画面中央になることが多いのですね。

セル番号だけのジャンプ

セル番号だけでは画面左上には表示されない

画面の左上(セルA1)の位置に表示させたつもりなんだけど失敗!

確かにセルBH100を選択されていますが、それ以上の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
  1. コマンドボタン1を押したら
  2. シートはsheet2を選ぶ
  3. セルA1を選ぶ
  4. 100行移動する
  5. 60列移動する
  6. sheet2を選択する
  7. セルBH100を選択する
  8. マクロ終了
このVBAコードでエクセル2007を使っている時は、なんの問題もなかったのですがエクセル2010以降は使えなくなった。

コンバイルエラー

エクセル2010ではエラー表示が出ました。

エラーになる原因っぽい日本語表記

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

波乗りアヒル
波乗りアヒル

エクセルのバージョンが違うと使えないなんて…

当時苦労しました。

ただ、どのように変更していいかわからなかったのですが、通常日本語使うときは「”日本語”」ってコード書いているのに、ここでは””がないからと思って、日本語の部分に””つけてみましたがダメでした。

それならばと、日本語表記しない方法でトライしてみたら、見事動きました!

下記のように日本語表記をしないコードです。

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

これでシート移動やセル移動で必ず画面左上に表示させる事が、エクセル2007以前もエクセル2010以降も問題なく動いてくれますよ。

波乗りアヒル
波乗りアヒル

もちろんエクセル2016でも順調に動いていますよ。

各コントロールまとめて転記シリーズ

ユーザーフォームを使うと配置したコントロール(テキストボックスやラベルなど)とセルとの間で値のやり取りが多くなります。

よく使うのでまとめてみました。

値の場所転記したい場所説明ページ
セルの値ラベル名VBAコード
セルの値テキストボックスの値VBAコード
セルの値コマンドボタンの表示名VBAコード
セルの値セルの値VBAコード
テキストボックス入力値セルの値VBAコード
波乗りアヒル
波乗りアヒル

成績表作成には知っておきたいExcel-VBAもくじ

ボウリングハンデキャップのつけ方
HDCPの種類はリーグのルールにより複雑に ボウリングの成績表(リーグ戦)で必ず必要になるのが、ハンデキャップ(HDCP)です。 ボウリングご予約の時に一番多く使われているのが、女性にだけハンデキャップをつけてあげることが多いですね。 だいだい何点ぐらいのハンデキャップが多いの?
ボウリングリーグ対戦表の数字を名前に自動変換する方法
リーグ戦の対戦表をエクセルで作る時、数字で表されている番号を名前に自動的に変換できると作業時間が短くなり効率的ですね。たった2つのエクセル関数を使うだけで、簡単にできるんです。今回の回戦数を入力するだけで一発変換完了。もちろんお客様にスケジュール対戦表として渡すことも簡単ですよ。
人数に応じてリーグ対戦表を自動選択する方法
複数の表があり、条件に合った表を選んで、さらにセルの値を選んで数字を名前に自動変換できると、とても便利なエクセルができますよね。ボウリングのリーグ対戦表も人数により表が異なるので、参加人数が決まったら、自動的に表を選んで対戦番号がこれも自動的に参加者名に変換されると便利で作業効率がアップして時間短縮になりますよ。
波乗りアヒル
波乗りアヒル

エクセルの勉強お疲れ様です。ちょっとひと休みしませんか?