見出し画像

Excelで(ほぼ)半ページ左右スクロールするマクロとマウス割り当て

Excel作業しているとき横スクロールさせたいときありますよね!?

ネットで検索すると「横スクロールには Alt + PageUP もしくは Alt + PageDown」とヒットします。ただし、これは1画面分の左右スクロールです。

1画面分も左右スクロールしてくれるな!
半画面分左右スクロールしてくれ!

マクロを組んでアドイン化、クイックアクセスツールバーに設定してAutoHotKeyでマウスのキーに割り当てまでを行い快適になりました。その話です。

(ほぼ)半ページ左右スクロールするマクロの作成

スクロールするためのAPIが2つあります。
SmallScroll (指定行、列だけスクロール)
LargeScroll (1画面分だけスクロール)

Alt + PageUp でのスクロールはLargeScrollが動いているみたいですね。
残念ながら0.5画面分スクロールという小数点の設定はできないため、SmallScrollで指定することにします。

”1画面分に表示されている列数”を引っ張ってこれれば、2で割って丸めてSmallScrollのパラメタに設定できるのですが、列数がわかりません。
(わかる方いたら教えてほしいです!)

APIのパラメータを眺めていたらActiveWindowというプロパティを見つけました。どうやら作業しているエクセルウインドウの幅(画素数)を取得できるようです。これを利用します。

実際のマクロが以下。右にスクロールするマクロです。

Sub MoveRight()
    ScrollValue = ActiveWindow.Width / 150
    ActiveWindow.SmallScroll Down:=0, ToRight:=ScrollValue
End Sub

左は単純にToRightをToLeftに書き換えるだけ。

Sub MoveLeft()
    ScrollValue = ActiveWindow.Width / 150
    ActiveWindow.SmallScroll Down:=0, ToLeft:=ScrollValue
End Sub

エクセルを最大化して使うとActiveWindow.Widthは1920になるはず…(ディスプレイの解像度が1920x1080のため)。ただ、メッセージボックスを使って確認したところ1452になっていました。わからない…。画面半分だと720。とりあえずアクティブな画面のどこかしらの幅と連動していることはわかったので進めます。

ActiveWindow.Widthを150で割っていますがここは適当(ハイパーパラメータ)です。150に設定すると、最大化1452のとき9.68、画面半分720のとき4.8。端数切捨てか四捨五入かはわかりませんが、だいたいこれくらいのスクロール感度が良かったのでこれにしました。

これで(ほぼ)半ページの左右スクロールマクロの完成です。

(ほぼ)半ページの左右スクロールマクロ

アドイン化してクイックアクセスツールバーに設定

ここからは楽にマクロを呼びだす工夫です。

まずはアドイン化します。名前を付けて保存から".xlam"というアドイン用の拡張子で保存します。保存しようとするとアドインを保存するデフォルトの場所に切替わるため、そのまま保存します。

エクセルのファイル>オプション>アドイン>管理:エクセル アドイン 設定から作成したアドインにチェックを入れて反映します。これでどのエクセルを開いても作成したマクロを実行できるはず。

さらにクイックアクセスツールバーに設定します。これは単にクイックアクセスツールバーの設定(その他のコマンド)から、コマンドの選択でマクロを指定し追加していきます。

クイックアクセスツールバーへマクロを設定する画面
クイックアクセスツールバーへマクロを設定した画面

これでエクセルの画面上部クイックアクセスツールバーにマクロ実行ボタンができました。クイックアクセスツールバーはAlt + 数字キーにショートカット割り当てがされているため、キーボード操作でもマクロを実行可能です。下の例だとAlt + 4 、Alt + 5で実行できる。

Altを押してから表示されるキーを押すと実行できる。

AutoHotKeyでマウスに割り当て

最近はエレコム製のトラックボールマウスDEFT Proを使用しています。AutoHotKeyを連携させてキー割り当てをしています。こっちのが使いやすいしメンテしやすい。

エクセル側の準備も整ったので、左右スクロールを割り当てします。

AutoHotKey側での設定

コードは下。

;===== Excel =====
#IfWinActive,ahk_exe EXCEL.EXE
AppsKey & Numpad1:: ;---DEFT Pro横の上奥ボタン---
    If GetKeyState("Esc")
        Send,^{PgUp} ;シート移動
    Else
        Send,!{5} ; Alt + 5  右スクロール
Return
AppsKey & Numpad2:: ; ---DEFT Pro横の上手前ボタン---
    If GetKeyState("Esc")
        Send,^{PgDn} ;シート移動
    Else
        Send,!{4} ; Alt + 4  左スクロール
Return
#IfWinActive

これでDEFT Proの横についているボタンの上側奥と上側手前で横スクロールができるようになりました。小指側のボタン(Esc設定)と同時押しで、シートの移動もできます。

便利になりました!満足満足!

この記事が気に入ったらサポートをしてみませんか?