スポンサーリンク
はじめに
Excel VBAではなんと、作成したマクロを、Excelの右クリックメニューに追加することまでできてしまう。
といっても私も、そんなにそれを活用してるわけでもない。
普通は、個人用マクロブックのマクロだったら、クイックアクセスツールバーやリボンをカスタマイズして組み込めば済む。
あるいは、マクロにショートカットキーを割り当てるという手もある。
また個人用マクロブックではなく個別のExcelブックに入れたマクロだったら、そのブックのシートに、マクロ起動用のボタンを配置すれば済む。
ということで、わざわざ右クリックメニューにマクロを登録する必要は、普通はあまりない。
そもそも、Excel作業を効率化していくためには、ショートカットキーなどを駆使してマウス離れしていくことが必要なので、右クリック自体を少なくしていかないといけないし。
どのようなマクロを右クリックメニューに登録するのか
では、どういうマクロを右クリックメニューに追加していけば良いのか。
私の考えとしては、「普段はほとんど使わないけど、特定の作業の時は結構使う」マクロを登録すれば良いのではないかと思う。
例えば上図で黄色く塗ったセルは、右端の方にあるが、横長のシートで作業する際にはこれを、下図のように左端にスクロールさせたいということがある。
こういうとき、スクロールをパッとできる都合良いショートカットキーなどは意外とない(はず)もので、そういうのを右クリックメニューに登録したりしている。
そもそもExcelシートを横長に作ること自体が好ましくないので、こういうスクロール機能を使いたいという機会は少ないのだが、人から渡されたシートでたまにその機能がほしくなることがある。
だからこういうのが、先述の「普段はほとんど使わないけど、特定の作業の時は結構使う」メニューに該当するわけだ。
じゃあこれは右クリックメニューじゃなくてリボン・クイックアクセスツールバー・ショートカットキーじゃ駄目なのか?
もちろんそれらでも良いのだけど、クイックアクセスツールバーやリボンに組み込んだマクロも、普段使わないものはどこに組み込んだか分からなくなることが結構ある。
ショートカットキーなんて尚更、どんなコマンドに設定したか忘れるしね。
だから、普段は忘れていて気紛れで思い出したときに繰り返し使いたいマクロを、右クリックメニューに組み込めば良いと思う。
構文など
メニューを追加登録する
Excelの右クリックメニューのほか、ツールバーなどにマクロを登録するに当たっては
という構文を使う。
○○には主に、
- セルの右クリックメニューなら「”Cell“」
- シート見出しの右クリックメニューなら「”Ply“」
といったものを入れる。
他に「”Worksheet Menu Bar”」といったものなら、リボンの「アドイン」タブ(とか、Excel2003時代のツールバー)にメニューを追加したりできるし他にも色々あるが、まあそういうのは気にしなくて良いだろう。
追加したメニューのリセットなど
右クリックメニューを5個追加するマクロを実行したとする。
そのとき追加された右クリックメニュー5個は、当然ながらというか次にExcelを起動した際も残り続ける。
更にもう一回マクロを実行すると、5個の右クリックメニューは再び追加されて、計10個登録されてしまい、どんどんメニューが増えてしまう。
追加した右クリックメニュー等は
といった構文でリセットできるので、今回のマクロでは必ずそれで最初にメニューを初期化するようにしている。
その他
右クリックメニューの追加を行う基本構文
の後には、主に次のような要素を盛り込む。
構文 | 内容 |
Caption = “現在行へスクロール” | 右クリックメニューに表示させる、マクロの説明文 |
OnAction = “scrollCurrentRow” | VBAで作成したマクロに付けた名前 |
また
BeginGroup = True
というのを書くと、メニューのグループを示すものとして区切り線が表示されるようになる。
ソースコード
それでは、右クリックメニューを追加するソースコードを示す。
今回サンプルとして、セルを右クリックしたときのメニューに追加したマクロは、次の4つで、どれも意外に有効なショートカットキーなどが標準機能には無いはず。
- 選択したセルがある列へスクロールする
- 選択したセルがある行へスクロールする
- セルの書式設定メニューで、文字の横位置を「標準」に設定する
- セルの書式設定メニューで、「文字の制御」を「縮小して全体を表示する」に設定する
セルでなくシート見出しを右クリックしたときのマクロも一応追加したが、このマクロ「breakLinksAndSheetCopy」については別の記事で紹介している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
Option Explicit Sub addRightClickMenu() '右クリックメニューを追加する。 '*****いったんリセットする***** Call resetRightClickMenu '*****(1)セルを右クリックした時のメニューを追加***** With Application.CommandBars("Cell").Controls.Add() .Caption = "現在列へスクロール" '説明文 .OnAction = "scrollCurrentColumn" 'マクロの名前 .BeginGroup = True 'グループにまとめる End With With Application.CommandBars("Cell").Controls.Add() .Caption = "現在行へスクロール" '説明文 .OnAction = "scrollCurrentRow" 'マクロの名前 End With With Application.CommandBars("Cell").Controls.Add() .Caption = "文字の横位置を標準に" '説明文 .OnAction = "horizontalAlignmentGeneral" 'マクロの名前 .BeginGroup = True 'グループにまとめる End With With Application.CommandBars("Cell").Controls.Add() .Caption = "セルの文字を縮小表示" '説明文 .OnAction = "rangeShrinkToFit" 'マクロの名前 End With '*****(2)シート見出しを右クリックした時のメニューを追加***** With Application.CommandBars("Ply").Controls.Add .Caption = "シート切り離し" '説明文 .OnAction = "breakLinksAndSheetCopy" 'マクロの名前 End With End Sub '*****セルの右クリック用***** Sub rangeShrinkToFit() 'セルの文字を縮小表示する Selection.ShrinkToFit = True End Sub Sub resetRightClickMenu() '右クリックメニューをリセット '"Cell"→セルを右クリックした時のメニュー '"Ply"→シート見出しを右クリックした時のメニュー Application.CommandBars("Cell").Reset Application.CommandBars("Ply").Reset End Sub Sub horizontalAlignmentGeneral() '文字の横位置を標準にする Selection.HorizontalAlignment = xlGeneral End Sub Sub scrollCurrentColumn() 'アクティブセルの列にスクロールする ActiveWindow.ScrollColumn = ActiveCell.Column - 1 End Sub Sub scrollCurrentRow() 'アクティブセルの行にスクロールする ActiveWindow.ScrollRow = ActiveCell.Row - 1 End Sub '*****シート見出しの右クリック用***** Sub breakLinksAndSheetCopy() 'リンクを解除してシートコピー ActiveWindow.SelectedSheets.Copy '選択されたシートをコピー 'リンクを解除 Dim wb As Workbook Dim vntLink As Variant Dim i As Integer Call appSet '描画省略、手動計算設定など Set wb = ActiveWorkbook vntLink = wb.LinkSources(xlLinkTypeExcelLinks) 'ブックの中にあるリンク If IsArray(vntLink) Then For i = 1 To UBound(vntLink) wb.BreakLink vntLink(i), xlLinkTypeExcelLinks 'リンク解除 Next i End If Call appReset '描画等再開 End Sub Sub appSet() 'マクロ処理中に、描画など余計なものを省略して高速化 With Application .ScreenUpdating = False '描画を省略 .Calculation = xlCalculationManual '手動計算 .DisplayAlerts = False '警告を省略。 ' .EnableEvents = False 'DisplayAlertsよりこちらを設定した方が良いのかな? End With End Sub Sub appReset() '描画などの設定をリセット With Application .ScreenUpdating = True '描画する .Calculation = xlCalculationAutomatic '自動計算 .DisplayAlerts = True '警告を行う End With End Sub |
上記ソースコードを個人用マクロブックに追加して、マクロ「addRightClickMenu」を実行すれば、下図のように右クリックメニューが追加されるはず。
他に、痒いところに手が届かないのを補えるマクロがあれば、こうやって右クリックメニューにどんどん追加していけば良いかと思う。
スポンサーリンク