Tuesday, January 8, 2019

Excel, Ctrl-Spaceで列全体を選択、Shift-Spaceで行全体を選択(IMEがONでも可能)

ありがとうございます。
https://qiita.com/s-show/items/252ba077b87462ed1b79

ExcelではCtrl-Spaceで列全体を選択できて、Shift-Spaceで行全体を選択できるのですが、このショートカットキーはIMEがONだと機能しません。そこで、IMEがONでもこの2つのショートカットキーが使えるようにします。

#Include  %A_ScriptDir%/IME.ahk
Return
#ifWinActive ahk_exe EXCEL.EXE
  $^Space::
    if (IME_GET())
    {
      IME_SET(0)
      Send,^{Space}
      IME_SET(1)
    }
    else
    {
      Send,^{Space}
    }
    Return
  $+Space::
    if (IME_GET())
    {
      IME_SET(0)
      Send,+{Space}
      IME_SET(1)
    }
    else
    {
      Send,+{Space}
    }
    Return
#ifWinActive
#ifWinActiveは、指定したウィンドウでのみ有効なキーバインドを設定したい場合に使います。今回は、ahk_exe EXCEL.EXEとすることで、この設定をExcelだけで有効にしています。

IME_GETやIME_SETは、IME制御 - eamat @Cabinet - アットウィキで配布されているIME.ahkという関数群のファイルをincludeすることで使える関数です。このファイルは、AutoHotKeyでIMEを制御するための関数が定義されており、IMEを制御したいときは必須のアイテムです。私の環境では、自作の設定ファイルと同じフォルダに保存していますので、#Include %A_ScriptDir%/IME.ahkで読み込んでいます。(%A_ScriptDir%は、それを記述した設定ファイルが保存されているフォルダを示す組み込み変数です。)

処理の流れは次のとおりです。

if(IME_GET())でIMEの状態を取得
IMEがON(IME_GET()の返り値が1 = AutoHotKeyでは真)ならIME_SET(0)でIMEをOFFにする
Send,^{Space}, Send,+{Space}で"ctrl(shift)-Space"を実行する。
IME_SET(1)でIMEをONに戻す
IMEがOFF(IME_GET()の返り値が0 = AutoHotKeyでは偽)なら、IMEは操作しないでSend,^{Space}, Send,+{Space}で"ctrl(shift)-Space"を実行する。

No comments:

Post a Comment