【Excel VBA】~右クリックメニューを独自にカスタマイズする~

【Excel VBA】~右クリックメニューを独自にカスタマイズする~

あいさつ

Excel VBAを作っていて、右クリックメニューを独自でカスタマイズしなければならない場面がありました。

ということでそのプログラムを紹介します。

ソースコード

早速ソースコードを紹介します。

まずはVBAのシートモジュール(Sheet1)に下記コードを入力します。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    
    Dim cmdBra1 As CommandBarControl
    Dim cmdBra2 As CommandBarControl
    
    '標準状態にリセット
    Application.CommandBars("Cell").Reset
    
    '全てのメニューを一旦削除
    For Each cmdBra1 In Application.CommandBars("Cell").Controls
        cmdBra1.Visible = False
    Next
    
    
    '以下で、新規のメニューを追加
    Set cmdBra1 = Application.CommandBars("Cell").Controls.Add()
    With cmdBra1
        .Caption = "クリア"
        .OnAction = "ClearCell"
    End With
    
    Set cmdBra1 = Application.CommandBars("Cell").Controls.Add(Type:=msoControlPopup)
    With cmdBra1
        .Caption = "文字入力"
    End With
    
    Set cmdBra2 = cmdBra1.Controls.Add()
    With cmdBra2
        .Caption = "A1に入力"
        .OnAction = "input_A1"
    End With
    
    Set cmdBra2 = cmdBra1.Controls.Add()
    With cmdBra2
        .Caption = "B2に入力"
        .OnAction = "input_B2"
    End With
    Application.CommandBars("Cell").ShowPopup
    Application.CommandBars("Cell").Reset
    Cancel = True
    
End Sub

次に下記コードを標準モジュールのシートに入力します。

Microsoft Excel Objectのフォルダで右クリックすると「挿入→標準モジュール」があるので、そのシートに入力します。

Sub ClearCell()
    Range("A1:B2").Clear
End Sub

Sub input_A1()
    Range("A1").Value = "A1入力"
End Sub

Sub input_B2()
    Range("B2").Value = "B2入力"
End Sub

実行結果

上記プログラムを記載後、Excelシート上で右クリックすると以下のようになります。

これで無事実装できました!!