Excelでは、VBAを使ってセルを右クリックしたときにグラフを自動作成する処理を実装できます。本記事では、特定の表範囲内でセルを右クリックしたときに、選択行のデータで折れ線グラフを新規作成するマクロの実装方法をご紹介します。
目次
完成イメージ
- 対象の表の任意のセルを右クリックすると、その行のデータをもとにグラフが自動で作成されます。
- 既存のグラフは削除され、常に最新のグラフが表示されます。
- グラフはセルの右下に自動的に配置され、凡例なしのコンパクトな折れ線グラフになります。
サンプルコード(VBA)
以下のコードをシートモジュールと標準モジュールにそれぞれ記述してください。
① シートモジュール(例:Sheet1)
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim dataBlock As Range
Set dataBlock = Range("B3:N20") ' 対象となる表の範囲
If Not Application.Intersect(Target, dataBlock) Is Nothing Then
Cancel = True ' 右クリックメニューを表示しない
Call createQuickChart(dataBlock, Target)
End If
End Sub
② 標準モジュール
Sub createQuickChart(dataBlock As Range, TargetCell As Range)
Dim rowRange As Range
Dim offsetRow As Long
Call clearOldCharts
' 表の1行目(見出し)と選択行をグラフ範囲に設定
offsetRow = TargetCell.Row - dataBlock.Row + 1
Set rowRange = Union(dataBlock.Rows(1), dataBlock.Rows(offsetRow))
' グラフを挿入し、位置を調整
With ActiveSheet.Shapes.AddChart2(240, xlLineMarkers)
.Left = TargetCell.Offset(0, 2).Left
.Top = TargetCell.Offset(1, 0).Top
With .Chart
.SetSourceData Source:=rowRange
.HasLegend = False
End With
End With
End Sub
Sub clearOldCharts()
If ActiveSheet.ChartObjects.Count > 0 Then
ActiveSheet.ChartObjects.Delete
End If
End Sub
コードの解説
Worksheet_BeforeRightClick
:セルを右クリックしたときのイベントです。対象の範囲内であれば、標準モジュールの関数createQuickChart
を呼び出します。createQuickChart
:見出し行+選択行を元に折れ線グラフを新規作成し、セルの右下に配置します。clearOldCharts
:グラフを毎回削除してから新規作成することで、複数のグラフが残らないようにしています。
利用のメリット
- 手作業でグラフを作成する手間を省けます。
- データの動的な可視化がすぐに行えるため、プレゼンやチェック作業にも最適です。
- マウス操作のみでグラフが生成されるため、非エンジニアでも使いやすい機能です。
注意点
ChartObjects(1)
のようなインデックス操作を使わず、都度グラフを削除する設計にしています。- セル範囲
B3:N20
は任意に変更可能です。 - グラフの種類(
xlLineMarkers
)は用途に応じて変更いただけます。
まとめ
Excel VBAを使えば、セルの右クリック操作に対して即座にグラフを作成するマクロを実装できます。視覚的な情報がすぐに得られるようになり、データ分析や報告資料の準備に非常に役立ちます。
日々の業務効率化や操作性の向上を図りたい方は、ぜひ導入をご検討ください。