2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 12 |
2012 | 02 | 03 | 04 | 05 | 06 | 10 | 11 | 12 |
2013 | 01 | 02 | 04 | 06 |
2014 | 06 |
2013-04-14
■[Word][VBA] WordVBAでのマクロのショートカット割り当て(Emacs風キーバインド暫定版)

Wordの場合はApplication.KeyBindings.Addメソッドを使ってショートカットキーの割り当てができる。
Application.Keybindings.Add _ KeyCategory:=wdKeyCategoryCommand, _ Command:="Command", _ KeyCode:="KeyCode"
あまり良く読んでないのでKeyCategory引数の意味とかしっかり理解していないが、"Command"には割り当てたいマクロの名前を文字列として、"KeyCode"には割り当てたいキーのーキーコードを数値として与える。キーコードはwdKeyAやwdKeyControlなどの名前の定数が用意されているので、それを足しあわせて作る。
割り当てたショートカットを解除するには次のようにする。
With Application.FindKey("KeyCode") .Disable .Clear End With
解除したいショートカットキーのキーコードを"KeyCode"に指定する。
これを利用すると、Wordで比較的簡単にEmacsのキーバインドを再現できる。
ちょっとだけやってみた。
'' ----- Emacsモードの有効化と無効化 --------------------- Sub EnableEmacsMode() Call AddKeyBindings("ForwardChar", wdKeyControl + wdKeyF) Call AddKeyBindings("BackwardChar", wdKeyControl + wdKeyB) Call AddKeyBindings("NextLine", wdKeyControl + wdKeyN) Call AddKeyBindings("PreviousLine", wdKeyControl + wdKeyP) Call AddKeyBindings("BeginningOfLine", wdKeyControl + wdKeyA) Call AddKeyBindings("EndOfLine", wdKeyControl + wdKeyE) End Sub Sub DisableEmacsMode() Call DeleteKeyBindings(wdKeyControl + wdKeyF) Call DeleteKeyBindings(wdKeyControl + wdKeyB) Call DeleteKeyBindings(wdKeyControl + wdKeyN) Call DeleteKeyBindings(wdKeyControl + wdKeyP) Call DeleteKeyBindings(wdKeyControl + wdKeyA) Call DeleteKeyBindings(wdKeyControl + wdKeyE) End Sub Sub AddKeyBindings(Command As String, KeyCode As Long) '' キーバインド登録 Application.KeyBindings.Add _ KeyCategory:=wdKeyCategoryCommand, _ Command:=Command, KeyCode:=KeyCode End Sub Sub DeleteKeyBindings(KeyCode As Long) '' キーバインド登録解除 With Application.FindKey(KeyCode) .Disable: .Clear End With End Sub '' ------ キーバインドマクロ定義 ------------------------ Sub ForwardChar() '' カーソル前移動 Selection.MoveRight unit:=wdCharacter, Count:=1 End Sub Sub BackwardChar() '' カーソル後ろ移動 Selection.MoveLeft unit:=wdCharacter, Count:=1 End Sub Sub NextLine() '' カーソル下移動 Selection.MoveDown unit:=wdLine, Count:=1 End Sub Sub PreviousLine() '' カーソル上移動 Selection.MoveUp unit:=wdLine, Count:=1 End Sub Sub BeginningOfLine() '' 行頭へ Selection.HomeKey unit:=wdLine End Sub Sub EndOfLine() '' 行末へ Selection.EndKey unit:=wdLine End Sub
https://gist.github.com/nozma/5383099
現在のファイルなりNormal.dotmなりにインポートしてEnableEmacsModeを実行すればEmacs風のキーバインドに(カーソル移動だけだが)なり、DisableEmacsModeを実行すれば通常の状態に戻る。
2ストロークについては ExcelでEmacsライクなキーバインドを使う - もうカツ丼でいいよなでやったようにC-xでショートカットが切り替わるようにすれば良いと思う。
とりあえず今日は眠いので残りはいずれ。もしくは誰かやっといて。
2012-05-05
■[Excel][VBA][Emacs] ExcelでEmacsライクなキーバインドを使う

いったい何なの
どうしてもExcelに大量のデータを入れないといけない状況にあってむしゃくしゃしたので、VBAのApplication.Onkeyメソッド等を利用して「概ね*1」Emacsライクに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の設定を解除するマクロは404 Not Foundのものを使用している。
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に戻る |