0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Excelの右クリックメニューに独自処理を追加する方法

Posted at

Excelのセル上にて右クリックした際に表示されるメニューに独自項目を追加し、任意のマクロを呼び出すアドオンを作成する。

まずはvbaのエディタを起動し、標準モジュールを作成し、以下のコードを記載する。

Module1.vb
Const MENU_1 As String = "test"

' アドインの追加を行った際に動く処理を定義
Sub addinInstall()

    ' cellの右クリックをした時のオブジェクトを取得
    Dim cbrCmd As CommandBar
    Set cbrCmd = Application.CommandBars("cell")
    
    Call addControl(cbrCmd, MENU_1)
    
    Set cbrCmd = Nothing

End Sub

' アドインの削除を行った際に動く処理を定義
Sub addinUninstall()

    ' cellの右クリックをした時のオブジェクトを取得
    Dim cbrCmd As CommandBar
    Set cbrCmd = Application.CommandBars("cell")
    
    Call deleteControl(cbrCmd, MENU_1)
    
    Set cbrCmd = Nothing

End Sub

' コントロールの追加
Function addControl(cbrCmd As CommandBar, caption As String)
    
    ' 同名のコントロールが存在しない場合
    If hasControls(cbrCmd, caption) = False Then
        ' ボタンを追加する。before:=1と指定することでメニューの一番上に追加となる。デフォルトは末尾に追加。
        With cbrCmd.Controls.Add(Type:=msoControlButton, Before:=1)
            ' ボタンの名称を指定
            .caption = caption
            ' ボタンを押下した際に動かすマクロ関数名を指定。ここではcaptionと同じとした。
            .OnAction = caption
        End With
    End If
    
End Function

' コントロールの削除
Function deleteControl(cbrCmd As CommandBar, caption As String)
        
    ' 指定されたコントロールが存在する場合
    If hasControls(cbrCmd, caption) Then
        ' コントロールを削除する
        cbrCmd.Controls(caption).Delete
    End If

End Function

' コントロールの存在チェック
Function hasControls(cbrCmd As CommandBar, caption As String) As Boolean
    For Each Control In cbrCmd.Controls
        If Control.caption = caption Then
            hasControls = True
            Exit Function
        End If
    Next
    hasControls = False
End Function

' 任意のマクロ処理
Sub test()
    MsgBox ("test")
End Sub

次にアドインの追加・削除をした際に、定義した内容が呼び出されるようにイベント設定をする。

ThisWorkBook
' アドイン追加時のイベント
Private Sub Workbook_AddinInstall()
    Call addinInstall
End Sub

' アドイン削除時のイベント
Private Sub Workbook_AddinUninstall()
    Call addinUninstall
End Sub

vbaエディタを閉じ、Bookを「Excelアドイン(*.xlam)」形式で保存する。

次にExcelのメニューからファイル→オプション→アドイン→設定を押下する。
参照から先ほど保存したアドインを指定し、一覧からチェックをする。
これでアドインが追加され、メニューに追加されるはず。
逆に一覧からチェックを外せばアドイン削除時のイベントが動き、メニューから削除されるはず。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?