ExcelでEmacsライクなキーバインドを使う

いったい何なの

どうしてもExcelに大量のデータを入れないといけない状況にあってむしゃくしゃしたので、VBAのApplication.Onkeyメソッド等を利用して「概ね*1EmacsライクにExcelを操作できる環境を作った。どうしても無理な部分は諦めたがカーソルの移動程度は上手くできたと思う…ので残り誰か作って下さい><
なお、「Mac使えよ」「Xkeymacsっていうのがあってね」「yamyでいいだろ」等々の発言をしたい恵まれた環境にある人は今すぐ帰って下さい!

インストール

使いたいExcelファイルの標準モジュールに後述のコードをコピペすればOK。
EmacsModeマクロを起動すれば各種キーバインドが設定されるので、ファイルを開いた時に自動起動したい場合は、ProjectのMicrosoft Excel ObjectのなかのThis Workbookに下記のように記述する。

Private Sub Workbook_Open()
    Call EmacsMode
End Sub

また、どのファイルに対しても使用したい場合はPersonal.xlsの作り方等を参考にPERSONAL.XLS(2007以降は.XLSB)を作成し、そちらに記述しておく(Excelが壊れたとか言われても対応できないので上記文章の意味がわからない人は無理に導入しないで下さい)。

使用方法

Emacs Mode

EmacsModeマクロを起動すると以下のコマンドが使用可能になる。それぞれのコマンドの実態はマクロで、Application.Onkeyメソッドでショートカットに割り当てている。なお、Application.Onkeyの設定を解除するマクロはhttp://www.rondebruin.nl/key.htmのものを使用している。

Command マクロ名 動作
Ctrl + f ForwardCell 右のセルに移動
Ctrl + b BackwardCell 左のセルに移動
Ctrl + p PreviousLine 一行上に移動
Ctrl + n NextLine 一行下に移動
Ctrl + a BeginningOfUsedRangeLine 現在の行でUsedRange*2の左端へ移動
Ctrl + e EndOfUsedRangeLine 現在の行でUsedRangeの右端へ移動
Alt + < BeginningOfUsedRangeRow 現在の列でUsedRangeの上端へ移動
Alt + > EndOfUsedRangeRow 現在の列でUsedRangeの下端へ移動
Ctrl + v ScrollUp 1画面進む
Ctrl + z ScrollDown 1画面戻る
Ctrl + l Recenter 現在の行が概ね中央となるようスクロール
Ctrl + s Search 検索ダイアログの表示
Ctrl + x CxMode C-xモード(後述)への移行
Shift + ESC Enable_keys 全てのショートカットをデフォルトの状態に戻す(Emacs Modeの終了)
C-x Mode

2ストロークのショートカットを仮想的に実現するため、Ctrl + xが押下されるとショートカットが切り替わるようになっている。このうち、Ctrl+x(切り取り)、Ctrl + v(貼り付け)およびCtrl+z(もとに戻す)を除くコマンドか、Ctrl + gでEmacs Modeに戻るようになっている。

Command マクロ名 動作
Ctrl + s SaveFile 上書き保存
Ctrl + w WriteFile 名前を付けて保存ダイアログの表示
Ctrl + f FindFile ファイルを開くダイアログの表示
Ctrl + p PrintFile 印刷ダイアログの表示
Ctrl + x なし*3 切り取り
Ctrl + v なし 貼り付け
Ctrl + z なし Undo
Ctrl + g EmacsMode Emacs Modeに戻る

*1:Undoの実装なんかはほとんど実現できそうになかったので諦めた。また、セルの内容を変えるマクロはUndoリストをクリアしてしまうので今のところ入れていない。SendKeysでなんとかできそうな気もするけどSendKeysは動作が安定せず上手く行ってない。

*2:Ctrl + *で選択されるセル範囲。何らかの値が入っているか、書式設定のされているセル全てを含む最小の矩形範囲。

*3:デフォルトの動作に戻る