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のショートカットがデフォルトであったので見送り。