HHKB

Excelの列選択と日英切替(IMEオンオフ)で「Ctrl-Space」が競合するのでExcel VBAで解決した

普段HHKBの英字配列を使っており、日英切替(IMEオンオフ)にCtrl-Spaceを割り当てています。

しかしCtrl-Spaceは、Excelの列選択のショートカットキーとかぶっています。

これでは、Excel利用時に列選択しようとするとかわりにIMEオンオフが起動してしまって困ります。

なので、Excel側でデフォルトのショートカットキー割当を変更して対処しました。

具体的な方法を記録に残します。

スポンサーリンク

解決法:Excel VBAのApplication.Onkeyを使う

解決方法は、キーボード入力をフックして任意の処理を呼び出すVBAのプロシージャ「Application.Onkey」を利用してショートカットキーの割当を変更する、です。

考え方

Excel起動時に、Excelのショートカットキー割当が以下の通り変更されるよう、VBAを仕込みます。

  • Ctrl-Spaceを無効にする(IMEオンオフで使うので)
  • Ctrl-Shift-Spaceを列選択に割り当てる

もともとCtrl-Shift-Spaceは「表全体の選択」のショートカットキーですが、Ctrl-aとほぼ同義で使わないので無視しました。

具体的な方法

Excelを開くとき「アドイン」が自動的に読み込まれることを利用し、Excel起動時に毎回ショートカットキー変更処理が走るようにします。

  1. 「myAddins.xlam」というマクロ専用ブックを準備する
  2. Excelの「オプション>アドイン」から、「myAddins.xlam」を読み込むよう設定する
  3. 「myAddins.xlam」のVBAProject配下に、以下の通りコードを配置する
Microsoft Excel Objects
'Excel起動時に読み込まれるプロシージャ
Private Sub Workbook_Open()
    Set xlAPP = Application
    Application.OnTime Now + TimeSerial(0, 0, 1), "appFirst"
End Sub
標準モジュール
'Excel起動時に自動実行するプロシージャ
Public Sub appFirst()
    'ファイル読込みに時間がかかるとエラーになるためスキップする
    On Error GoTo nextProc
    
    '自動実行したい処理の本体
    
    'Ctrl-Shift-Spaceに列選択を割り当てる
    Application.OnKey "+^ ", "列選択"
    
    'Ctrl-Spaceを無効にする
    Application.OnKey "^ ", ""
  
nextProc:
End Sub

'列選択処理の本体
Sub 列選択()
    Selection.EntireColumn.Select
End Sub

参考にさせていただいた記事

なお、本方法やコードを書く際に、以下記事をおおいに参考にさせていただきました。

参考 【VBA】列を選択状態にする(1列だけ、連続した複数列、離れた複数列) | えくとしょ | 初心者のためのエクセルとVBAの図書館
→Ctrl-Spaceと同じ仕様の列選択はVBA上では「EntireColumn.Select」であることを知る

参考 マクロにショートカットキーを設定する:Excel VBA|即効テクニック|Excel VBAを学ぶならmoug
→Application.OnKeyで、キーボード入力をフックしてVBAの関数が呼び出せることを知る

参考 OnKey メソッド (Excel) | Microsoft Docs
→Application.OnKeyの一般的な仕様を知る(でもスペースの使い方がない)

参考 OnKey for “Ctrl Space” | MrExcel Message Board
→OnKeyメソッドでスペースを使う方法を知る

参考 ブックを開いた時やExcel起動時にマクロを自動実行する – Sumihirablog.
→Excel起動時にマクロを自動実行する方法をしる

解決法を施した結果

  • Excelを使うときはCtrl-Shift-Spaceで列選択できるようになった
  • Excel含めあらゆるシーンでCtrl-Spaceで日英切替(IMEオンオフ)ができるようになた
  • 結果、仕事用Windows PCと私用Chromebook、双方で日英切替がCtrl-Spaceに統一できた

どのPCでもHHKBを使っているので、日英切替(IMEオンオフ)含め運指を統一したい、というのがぼくの思いです。

今回の解決法で、仕事PCと私用PCで操作が統一されたため、理想に一方近づけました。

NAE
NAE

あとはAndroidのIME切替(Shift-Space)です

まとめ:Excelのデフォルトショートカットキーは変更できる

Excelの列選択と日英切替(IMEオンオフ)のショートカットキーかぶり、ずっと目の上のたんこぶでした。

あまりに気になるし、仕事効率にも影響するので、HHKBキーマップ変更ソフトやAutoHotKeyや使ってキーマップ自体を変更することも考えました。

が、問題が起こるのがExcelのみですし、キーマップ自体をいじるのはやりすぎかも……という思いもあり。

結果、Excelの世界の中で解決する方法が見つかり、気持ちよく解決できました。

Excelのデフォルトのショートカットキーは任意変更できることがわかったのも収穫でした。

この記事が、同じような悩みを持たれている方の参考になれば幸いです。

以上「ショートカットキー「Ctrl-Space」が、Excel列選択と日英切替(IMEオンオフ)で競合しないようにするVBAの設定方法」でした。