右クリックメニューの変更(CommandBars)
セルを右クリックした時のショートカットメニューを変更します、
右クリックメニューからマクロを起動できるようにすることで利便性が向上します。
マクロVBAの起動方法として、簡便な手段のひとつと言えます。
シートモジュールに以下を追加
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 = "AA"
.FaceId = 2
.OnAction = "AA"
End With
Set cmdBra1 = Application.CommandBars("Cell").Controls.Add(Type:=msoControlPopup)
With cmdBra1
.Caption = "BB"
End With
Set cmdBra2 = cmdBra1.Controls.Add()
With cmdBra2
.Caption = "BB1"
.FaceId = 3
.OnAction = "BB1"
End With
Set cmdBra2 = cmdBra1.Controls.Add()
With cmdBra2
.Caption = "BB2"
.FaceId = 4
.OnAction = "BB2"
End With
Application.CommandBars("Cell").ShowPopup
Application.CommandBars("Cell").Reset
Cancel = True
End Sub
標準モジュールに以下を追加
Sub AA()
ActiveCell.Value = "AA"
End Sub
Sub BB1()
ActiveCell.Value = "BB1"
End Sub
Sub BB2()
ActiveCell.Value = "BB2"
End Sub
OnActionで呼ぶプロシージャーは、必ず標準モジュールに作成します。

コマンドバー.Controls.Add()
| 名前 | 説明 |
| Type | 指定したコマンド バーに追加するコントロールの種類を指定します。使用できる定数は、MsoControl クラスの msoControlButton、msoControlEdit、msoControlDropdown、msoControlComboBox、msoControlPopup のいずれかです。 |
| Id | 組み込みのコントロールを表す整数を指定します。この引数を 1 に設定するか省略すると、指定した種類の空白のカスタム コントロールがコマンド バーに追加されます。 |
| Parameter | 組み込みのコントロールの場合、この引数はコンテナー アプリケーションでコマンドを実行するときに使用されます。カスタム コントロールの場合、この引数を使用して、Visual Basic のプロシージャに情報を渡したり、Tag プロパティの 2 番目の値のようなコントロールの情報を格納することができます。 |
| Before | コマンド バーにおける新しいコントロールの位置を表す数字を指定します。新しいコントロールは、指定した位置にあるコントロールの直前に挿入されます。この引数を省略すると、コントロールは指定したコマンド バーの末尾に追加されます。 |
| Temporary | True を指定すると、新しいコントロールが一時的なものになります。このコントロールは、コンテナー アプリケーションの終了と同時に自動的に削除されます。この引数を省略すると、既定値の False になります。 |
上記サンプルでは、"BB"は親メニューになりますので、
コントロールのメンバーについて
Type毎に、属するメンバー(メソッド、プロパティ)が少しずつ違いますので、詳細はヘルプ等を参照して下さい。
CommandBarsの種類
この他、多くのCommandBarが存在します。
以下のVBAでイミディエイトに出力される文字列がCommandBarsに指定する文字列になります。
Sub PrintCommandBar()
Dim bar As CommandBar
For Each bar In Application.CommandBars
Debug.Print bar.Name & ":" & bar.Index
Next
End Sub
これを見ると分かりますが、
Cell
これが2つでてきます。
これは、シートの表示が「標準」と「改ページプレビュー」の2つがあるからです。
改ページプレビュー → Cell:42
※このindexはバージョンによって変わります。上記は2021年7月の365
このindexに9と42を指定して両方に設定しても良いのですが、
バージョンに依存してしまうので、以下のようにFor Eachで"Cell"を探して設定するようにしてください。
For Each bar In CommandBars
If bar.Name = "Cell" Then
'ここで設定
End If
Next
テーブル内のセルの右クリック
テーブル内のセルは、
CommandBars("Cell")
CommandBars("List Range Popup")
同じテーマ「マクロVBAサンプル集」の記事
ストップウォッチ改(1/100秒)(Timer)
重複の無いユニークなデータ作成
WEBデータの取得方法
右クリックメニューの変更(CommandBars)
エクセルのアイコン取得(FaceID)
素数を求めるマクロ
入力規則のリスト入力の妥当性判定
配色を使用したカラー設定を固定カラーに変更
指定セルに名前定義されているか判定する
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
ハイパーリンクからファイルのフルパスを取得する
新着記事NEW ・・・新着記事一覧を見る
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
SQL基礎問題6:成績表から教科ごとの点数ベスト3を抽出|SQL入門(2025-11-02)
SQL基礎問題5:複数のマスタテーブルの結合|SQL入門(2025-11-01)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- 右クリックメニューの変更(CommandBars)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
