Excelスキルアップコレクション
           〜 Something U Want 〜


Google  

WWW を検索
Excelスキルアップコレクション内 を検索
 @     Top  >     Excelプロフェッショナルエンジニアテクニック Topics  >     (03) Excelの右クリックメニューに自作マクロを追加する

 
(03) Excelの右クリックメニューに自作マクロを追加する

 Excelのシート上で右クリックを行うと、以下のようなExcelの編集メニューが表示されます。(※Excelのバージョンによって異なります。)

 この右クリックメニューに自作マクロを登録する方法を紹介します。

  右クリックメニューの追加
 以下のような自作マクロを作成したとします。

 1行目:  ' *
 2行目:  ' * 朝の挨拶
 3行目:  ' *
 4行目:  Public Sub GoodMorning()
 5行目:      MsgBox "おはよう"
 6行目:  End Sub
 Excelイベントプロシジャ「Worksheet_BeforeRightClick」を"Sheet1"に記載します。

 1行目:  ' *
 2行目:  ' * シート右クリック前のイベントプロシジャ
 3行目:  ' *
 4行目:  Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
 5行目:      ' 右クリックメニューを初期設定に戻す。
 6行目:      Application.CommandBars("Cell").Reset
 7行目:      
 8行目:      ' 右クリックメニューに挨拶マクロメニューを追加する。
 9行目:      With Application.CommandBars("Cell").Controls.Add()
10行目:          .BeginGroup = True
11行目:          .Caption = "朝の挨拶"
12行目:          .FaceId = 931
13行目:          .OnAction = "GoodMorning"
14行目:      End With
15行目:  End Sub
 Sheet1上で右クリックメニューを表示させると、右クリック直前にイベントプロプロシジャが自動起動して、メニューが追加されます。




 メニューから朝の挨拶を選択すると、以下のメッセージボックスが表示され、自作マクロが呼び出せていることがわかります。


 右クリックメニューから朝の挨拶メニューが選択できるシートをSheet1に限定したい場合には、さらに次の を実行してください。

 右クリックメニューから朝の挨拶メニューが選択できるシートをSheet1に限定 するために、ThisWorkBookにイベントプロシジャ「Workbook_Deactivate」、Sheet1にイベントプロシジャ「Worksheet_Deactivate」を用意し、それぞれ以下のコードを実行させるようにして下さい。
 <Book1>

 1行目:  Private Sub Workbook_Deactivate()
 2行目:      ' 右クリックメニューを初期設定に戻す。
 3行目:      Application.CommandBars("Cell").Reset
 4行目:  End Sub
 <Sheet1>

 1行目:  Private Sub Worksheet_Deactivate()
 2行目:      ' 右クリックメニューを初期設定に戻す。
 3行目:      Application.CommandBars("Cell").Reset
 4行目:  End Sub

 イベントプロシジャ「Worksheet_BeforeRightClick」に記載した、6行目のResetは、右クリックメニューを初期設定に戻す働きがあります。「Worksheet_BeforeRightClick」は、Excelのシート上で右クリック操作が行われる直前に実行されるイベントプロシジャです。Reset処理がなければ、右クリックメニューを開く度に、朝の挨拶メニューが追加され、以下のような事態に陥ります。注意してください。
 例:3回右クリックした場合
 これらのイベントプロシジャを用意することで、自作した右クリックメニューは、特定のブックの特定のシートに限定することができます。


  右クリックメニューへサブメニューを追加
 右クリックメニューにサブメニューを追加することができます。以下に、サブメニューの追加方法を紹介します。
 適当なExcelブックを一つ用意します。
 以下の標準モジュール"Module1"作成します。
 <Module1>

 1行目:  Option Explicit
 2行目:  
 3行目:  Private Const msg_m1 As String = "Good Morning !"
 4行目:  Private Const msg_m2 As String = "Get Up Soon !"
 5行目:  Private Const msg_m3 As String = "Did You Sleep Well ?"
 6行目:  Private Const msg_a1 As String = "Good Afternoon !"
 7行目:  Private Const msg_n1 As String = "Good Night !"
 8行目:  
 9行目:  ' *
10行目:  ' * 朝の挨拶(1)
11行目:  ' *
12行目:  Public Sub GoodMorning1()
13行目:      MsgBox msg_m1
14行目:  End Sub
15行目:  
16行目:  ' *
17行目:  ' * 朝の挨拶(2)
18行目:  ' *
19行目:  Public Sub GoodMorning2()
20行目:      MsgBox msg_m2
21行目:  End Sub
22行目:  
23行目:  ' *
24行目:  ' * 朝の挨拶(3)
25行目:  ' *
26行目:  Public Sub GoodMorning3()
27行目:      MsgBox msg_m3
28行目:  End Sub
29行目:  
30行目:  ' *
31行目:  ' * 昼の挨拶(1)
32行目:  ' *
33行目:  Public Sub GoodAfternoon1()
34行目:      MsgBox msg_a1
35行目:  End Sub
36行目:  
37行目:  ' *
38行目:  ' * 夜の挨拶(1)
39行目:  ' *
40行目:  Public Sub GoodNight1()
41行目:      MsgBox msg_n1
42行目:  End Sub
 以下の標準モジュール"RMenuModule "を作成します。
 <RMenuModule>

 1行目:  Option Explicit
 2行目:  
 3行目:  ' *
 4行目:  ' * 右クリックメニューを設定する
 5行目:  ' *
 6行目:  Public Sub set_RightMenu()
 7行目:      ' 右クリックメニューを初期設定にする。
 8行目:      Call reset_RightMenu
 9行目:      
10行目:      ' 右クリックメニューに挨拶メニューを追加する。
11行目:      With Application.CommandBars("Cell") _
12行目:          .Controls.Add(Type:=msoControlPopup)
13行目:          .BeginGroup = True
14行目:          .Caption = "朝の挨拶"
15行目:          With .Controls.Add(Type:=msoControlButton)
16行目:              .Caption = "朝の挨拶(1)"
17行目:              .FaceId = 931
18行目:              .OnAction = "GoodMorning1"
19行目:          End With
20行目:          With .Controls.Add(Type:=msoControlButton)
21行目:              .Caption = "朝の挨拶(2)"
22行目:              .FaceId = 931
23行目:              .OnAction = "GoodMorning2"
24行目:          End With
25行目:          With .Controls.Add(Type:=msoControlButton)
26行目:              .Caption = "朝の挨拶(3)"
27行目:              .FaceId = 931
28行目:              .OnAction = "GoodMorning3"
29行目:          End With
30行目:      End With
31行目:      With Application.CommandBars("Cell") _
32行目:          .Controls.Add()
33行目:          .BeginGroup = True
34行目:          .Caption = "昼の挨拶"
35行目:          .FaceId = 682
36行目:          .OnAction = "GoodAfternoon1"
37行目:      End With
38行目:      With Application.CommandBars("Cell") _
39行目:          .Controls.Add()
40行目:          .BeginGroup = True
41行目:          .Caption = "夜の挨拶"
42行目:          .FaceId = 965
43行目:          .OnAction = "GoodNight1"
44行目:      End With
45行目:  End Sub
46行目:  
47行目:  ' *
48行目:  ' * 右クリックメニューを初期化
49行目:  ' *
50行目:  Public Sub reset_RightMenu()
51行目:      ' 右クリックメニューを初期設定にする。
52行目:      Application.CommandBars("Cell").Reset
53行目:  End Sub
 プロシジャ"set_RightMenu"を実行します。実行後、シート上で右クリックメニューを開いてみると、メニューが追加されていることを確認できます。
 メニューから朝の挨拶(1)を選択すると、以下のメッセージボックスが出力され、自作マクロが呼び出せていることが確認できます。
ページの先頭へ