VBAサンプル集
右クリックメニューの変更(CommandBars)

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2013年5月以前 最終更新日:2021-07-13

右クリックメニューの変更(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で呼ぶプロシージャーは、必ず標準モジュールに作成します。

ここでは、単にアクティブセルに文字を入れているだけです。

これで、シートモジュールを追加したシートでセルを右クリックすると

VBA Excelサンプル

このように表示され、メニューをクリックすると、対応する文字がセルに入るようになります。


コマンドバー.Controls.Add()

Addに指定する引数です。

名前 説明
Type 指定したコマンド バーに追加するコントロールの種類を指定します。使用できる定数は、MsoControl クラスの msoControlButton、msoControlEdit、msoControlDropdown、msoControlComboBox、msoControlPopup のいずれかです。
Id 組み込みのコントロールを表す整数を指定します。この引数を 1 に設定するか省略すると、指定した種類の空白のカスタム コントロールがコマンド バーに追加されます。
Parameter 組み込みのコントロールの場合、この引数はコンテナー アプリケーションでコマンドを実行するときに使用されます。カスタム コントロールの場合、この引数を使用して、Visual Basic のプロシージャに情報を渡したり、Tag プロパティの 2 番目の値のようなコントロールの情報を格納することができます。
Before コマンド バーにおける新しいコントロールの位置を表す数字を指定します。新しいコントロールは、指定した位置にあるコントロールの直前に挿入されます。この引数を省略すると、コントロールは指定したコマンド バーの末尾に追加されます。
Temporary True を指定すると、新しいコントロールが一時的なものになります。このコントロールは、コンテナー アプリケーションの終了と同時に自動的に削除されます。この引数を省略すると、既定値の False になります。

上記サンプルでは、"BB"は親メニューになりますので、

Type:=msoControlPopup

これを指定しています。

他で省略している場合は、

Type:=msoControlButton

となります。


コントロールのメンバーについて

Type:=msoControlButtonの場合には、アイコンを指定できます。

それが、FaceIdです。

この番号と実際のアイコンについては、「エクセルのアイコン取得」を参照して下さい。
エクセル内のアイコンを取得します。「右クリックメニューの変更」のFaceIdとして使用します。2003までなら、ツールバーが追加されます。2007以降では、リボンのアドインの中に追加されます。ConststartNoAsInteger=1'開始番号を指定 ConststopNoAsInteger=50'終了番号を指…

Type毎に、属するメンバー(メソッド、プロパティ)が少しずつ違いますので、詳細はヘルプ等を参照して下さい。


CommandBarsの種類

上記は、表示が「標準」の時のセルの右クリックなので、

CommandBars("Cell")

としました。
この他、多くの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:9
改ページプレビュー → Cell:42

※ページレイアウトは標準と同じ
※このindexはバージョンによって変わります。上記は2021年7月の365

したがって、「改ページプレビュー」の場合の右クリックメニューも変更したい場合は両方に入れる必要があります。

Application.CommandBars(index)
このindexに942を指定して両方に設定しても良いのですが、
バージョンに依存してしまうので、以下のようにFor Eachで"Cell"を探して設定するようにしてください。

  For Each bar In CommandBars
    If bar.Name = "Cell" Then
      'ここで設定
    End If
  Next




同じテーマ「マクロVBAサンプル集」の記事

ストップウォッチ改(1/100秒)(Timer)
重複の無いユニークなデータ作成
WEBデータの取得方法
右クリックメニューの変更(CommandBars)
エクセルのアイコン取得(FaceID)
素数を求めるマクロ
入力規則のリスト入力の妥当性判定
配色を使用したカラー設定を固定カラーに変更
指定セルに名前定義されているか判定する
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
ハイパーリンクからファイルのフルパスを取得する


新着記事NEW ・・・新着記事一覧を見る

ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ