「今さら」なんてない

「自分にもできそう」を伝播させるブログ

普通のExcelシートから読み込み!【ショートカットの割当と開放】【Excel VBA】

こちらの記事で紹介したExcelタスク管理ツールの補助機能の紹介です。
はじめての方はまずはこちらの記事をどうぞ。 yoshino-ya.hatenablog.com



それでは本題です。

マクロっていちいちショートカットの割当をするのが面倒なのでショートカット設定シートを作りました。

目次

やること

「設定」というシートを用意し画像の様なリストを用意する

  • F5やTABなどは{}で囲って下さい
  • →、←なども{RIGHT}、{LEFT}などとして下さい(置換リスト作るのが面倒なので)

f:id:yoshino-ya:20180616044505p:plain

標準モジュールにコードをコピペする

以下のコードを指定のモジュールにコピペして下さい。

コピペするコード

標準モジュール用

SaveSettingとかGetSettingとかはレジストリに保存しないと非アクティブ化した時にエラーが出るっぽいのでそれ対策です

Sub ショートカットキーの割り当て()
        Dim キー As String
        Dim i As Integer
        
    i = 4
    Do While Sheets("設定").Cells(i, 4) <> ""
        With Sheets("設定")
            キー = .Cells(i, 1).Value & .Cells(i, 2).Value & .Cells(i, 3).Value
            キー = Replace(キー, "Ctrl", "^")
            キー = Replace(キー, "Alt", "%")
            キー = Replace(キー, "Shift", "+")
            キー = Replace(キー, "Enter", "~")
            Application.OnKey キー, .Cells(i, 4).Value
            キー一覧 = キー一覧 & キー & ","
        End With
        i = i + 1
    Loop
    
    SaveSetting "MyMacro", "設定", "ショートカット登録分", キー一覧
    
End Sub

Sub ショートカットキーの解放()
    キーArray = Split(GetSetting("MyMacro", "設定", "ショートカット登録分"), ",")
        
    For i = 0 To UBound(キーArray) - 1
        Application.OnKey キーArray(i)
    Next i

End Sub

ThisWorkbook用

アクティブ化、非アクティブ化した際に動作するようにします

Private Sub Workbook_Activate()
    Call ショートカットキーの割り当て
End Sub

Private Sub Workbook_Deactivate()
    Call ショートカットキーの解放
End Sub

シートモジュール用

こちらもアクティブ化、非アクティブ化した際に動作するようにします

Private Sub Worksheet_Activate()
    Call ショートカットキーの割り当て
End Sub

Private Sub Worksheet_Deactivate()
    Call ショートカットキーの解放
End Sub

以上です。

素人なのでコードの書き方等、 お見苦しい所が多々あるかと思いますが、 何卒ご容赦いただければと思います。