ExcelでViのキー操作

どうしても諦めきれず、ちょぃと調べました。
Excelと言ったら、企画職のメインツールですからね〜。
そしたら、Excelのアドインとして組めば(無理やりですが)キーバインドの変更っぽいことが実現できそうなことが発覚。
ViExcelというアドインが既にありましたが、ちょっと理想とは違ったのでこちらは見送り。
こちらはかなり操作が変わってしまうんですが、欲しかったのは既存のExcelの操作を残した上でViの操作ができるものだったので。
一応仕事PCも自分専用ですが、他の人が触らないとも限らないですし……基本操作を変えるのはちょっと抵抗が。(あまりに使いやすければやっちゃうかもしれないけどw)


ExcelVBAなんて、ちょこっとファイルをマクロ操作するくらいにしか最近使ってなかったので、基本的なことで詰まりまくりました……。
標準モジュールとクラスモジュールの違いって何だっけ……とか(ぁ
主にCライクな言語を触ってきたので、Basic系はたまに戸惑う……。


結論から言うと、h/j/k/lで←/↓/↑/→の操作(っぽいもの)はできました。
ただ、一番の問題は別のところにありました。
h/j/k/lは何と同時押しにしようか。ということ。
素のh/j/k/lに割り当てるのはちょっと抵抗が……。


CtrlはCtrl+Hで置換とかがあるので除外。
ということで、Altに割り当てようとしました。
Altからのショートカットもよく使いますが、同時押しはしないので大丈夫。
かと思ったんですが、Alt+Hで「ヘルプ」が誤作動……。
正直ヘルプくらい潰しちゃってもいいんですが、いくら使わないからといってそこらのメジャーなショートカットの動作を変えるのは気が引けて……結局はCtrl+Shiftに割り当てました。
使いやすさはまだちょっと判りません〜。
ないよりはいいけど、慣れるまではちょっとかかるかな。


以下、実装したコード載せておきます。
Excelファイルからアドインにする方法はググればすぐ出てくるので省略。

ThisWorkbook

Private X As New EventClassModule

Private Sub Workbook_Open()
    Set X.App = Application
End Sub


クラスモジュール:EventClassModule

Public WithEvents App As Application

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    Application.OnKey "+^h", "moveLeft"
    Application.OnKey "+^j", "moveDown"
    Application.OnKey "+^k", "moveUp"
    Application.OnKey "+^l", "moveRight"
End Sub


標準モジュール:Module1

Sub moveUp()
    If ActiveCell.Row <> 1 Then
        ActiveCell.Offset(-1, 0).Select
    End If
End Sub

Sub moveDown()
    'ExcelのバージョンアップでRowのMAXが変わったらここの数値を変更
    If ActiveCell.Row <> 65536 Then
        ActiveCell.Offset(1, 0).Select
    End If
End Sub

Sub moveLeft()
    If ActiveCell.Column <> 1 Then
        ActiveCell.Offset(0, -1).Select
    End If
End Sub

Sub moveRight()
    'ExcelのバージョンアップでColumnのMAXが変わったらここの数値を変更
    If ActiveCell.Column <> 256 Then
        ActiveCell.Offset(0, 1).Select
    End If
End Sub


これでExcel2000/2002で動きました。
実際の方向キーに割り当ててもよかったんですが、なんとなく後で操作入れる場合も考えてこっちに。
ただ、そのおかげで非表示のセルも移動対象になってます。
「0」(行頭ジャンプ)と「$」(行末ジャンプ)も割り当てようと思いましたが、
こっちは両方Ctrl+Shiftのショートカットがデフォルトであったので見送り。