VBA で作成した マクロ実行 する方法として、メニューから実行、ショートカットを作って実行、ボタンを作ってボタンクリックで実行。どれでも処理できますが、 右クリック だけで でマクロ実行する。ちょっとした 小ネタ ですが、便利になること間違いなし!やってみませんか?
やりたいこと
右クリックでマクロを実行
手段
特定場所(例えば1列目)で右クリックすればマクロを実行するクリックアクションで実装します。
早速いってみましょう!
サンプルソース(コード)

※通常の標準モジュールではなく、エディターの左側のエクスプローラーにある「ThisWorkbook」をダブルクリックしてソースを書き込んでください。
通常、プログラムソースは、標準モジュールというくくりの中に、モジュール単位で定義されます。
実行するプログラム毎に動きを定義していますが、今回はワークブック全体(開いているExcelファイル全体)に有効にするため、標準モジュールではなく、「ThisWorkbook」に記載する必要があります。
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object , ByVal Target As Range , Cancel As Boolean) '----(1)
If Target.Row = 1 Then '----(2)1列目で右クリックした場合有効となる
Cancel = True '----(3)通常の右クリックショートカットを停止
'<<処置>> '----(4)例えばユーザフォームの実行など
''UserForm1.show 'ユーザフォームを開く場合
End If
End Sub
- (1)1行目のPrivate~の部分に記載されています通り、RightClick(右クリック)を実行した場合に有効になるプログラムです。
※1 ( )の中のByVal~は、RightClickのアクションを使うための引数の設定になります。
※2 今回は有効となる場所を定義するためのTargetと、通常有効な右クリックのショートカットコマンドをキャンセルするため、Cancelという引数を宣言します。
※3 現時点では、そのままコピペしてください。ゆくゆくは理解すればよいですが、すべて覚える必要はありません。適宜ヘルプ等で参照できれば十分です。 - (2)Target.Row~で、1行目ならという条件を入れています。
例えば、Target.Rowではなく、列を示す、Columnと組み合わせ、Target.Column とすると1列目を選択した場合という意味になります。 - (3)右クリックを実行した箇所が、(2)で一致した場合、右クリックコマンドをキャンセルします。
1行目以外で実行した場合は、通常の右クリックショートカットメニューが表示されます。 - (4)結果、(2)の条件に一致した場合に実行する処理です。
今回は別に定義した、UserFormを実行する関数を記載しましたので、
【条件】1行目で
【アクション】右クリックした場合
【処理】UserFormが表示
されます。
ただし、本処理では、全ワークシートで有効となるため、例えば、処理不要なシートの1列目で並び替えを実施しようと右クリックすると・・・処理が動きます。
その場合、選択シートを指定する場合も可能です。
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object , ByVal Target As Range , Cancel As Boolean)
Dim SelectSheet As String
SelectSheet = ActiveSheet.Name
If SelectSheet = "Sheet1" and Target.Row = 1 =True Then '----シート名がSheet1でかつ1列目で右クリックした場合有効となる
Cancel = True
'<<処置>>
''UserForm1.show
End If
End Sub
本設定をすれば、手間を省略することが出来ますし、毎回マウスでクリックするより、システムっぽくなりますね!
(ショートカット登録すれば良いというお声もありますが、ショートカットキーを覚えるの大変じゃないですか・・・)
便利になること間違いなしです。一度試してみてください。
右クリック以外にも、ファイルを開いた瞬間や保存した瞬間に実行する。なんてこともできます。
別途、使い勝手が良いアクションコマンドを紹介します!