VBA でグラフを扱う際、
「毎回コードを書き換えて実行するのが面倒」
「他のメンバーにも簡単に操作してほしい」
というニーズがよくあります。
そこで効果を発揮するのが、
「ユーザーフォーム(GUI)」や「シート上のボタン」 との連携です。
目次
1. ボタンを使ってワンクリックでグラフ更新する仕組み
もっとも簡単な操作性改善は、
シートに配置したボタンにマクロを割り当てる方法 です。
▼ ボタンの設定手順
- 開発タブ →「挿入」→ フォームコントロールの「ボタン」
- 任意の位置に配置
- 表示されたマクロ一覧から「UpdateChart」を選択
▼ グラフ更新マクロ例
Sub UpdateChart()
Dim ws As Worksheet
Dim chartObj As ChartObject
Set ws = Sheets("Sheet1")
Set chartObj = ws.ChartObjects("売上グラフ")
'データ範囲の更新(例:A1:Bの最終行)
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
chartObj.Chart.SetSourceData Source:=ws.Range("A1:B" & lastRow)
MsgBox "グラフを更新しました!"
End Sub
ボタンを押すだけで、
常に最新データを反映したグラフを描画 できます。
2. ユーザーフォームで操作項目を GUI 化する
より高度な操作性を求める場合は
ユーザーフォーム(UserForm) を使います。
ユーザーフォームでは、
- 対象となる月を選ぶ
- グラフの種類を選ぶ
- 色を選ぶ
- 出力先シートを選ぶ
など、複数のパラメータを直感的に切り替え可能 です。
3. 月を選んでグラフ表示を切り替えるサンプルフォーム
以下は実務で最も使われる形式の one pattern。
「選択された月だけグラフ化する」処理をユーザーフォームから操作できます。
▼ 1) UserForm の構成例
UserForm に以下のコントロールを配置:
| コントロール | 役割 |
|---|---|
| ComboBox cmbMonth | 月を選択(1〜12) |
| CommandButton btnCreate | グラフ作成ボタン |
配置後、初期化イベントで月一覧をセットします。
▼ 2) フォーム初期化
Private Sub UserForm_Initialize()
Dim i As Long
For i = 1 To 12
Me.cmbMonth.AddItem i
Next i
End Sub
▼ 3) グラフ作成ボタンのコード
Private Sub btnCreate_Click()
Dim ws As Worksheet
Set ws = Sheets("データ")
Dim selectMonth As Long
selectMonth = Me.cmbMonth.Value
If selectMonth = 0 Then
MsgBox "月を選択してください。"
Exit Sub
End If
'該当月のデータ範囲を取得(例:A列=月、B列=値)
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim rng As Range
Set rng = ws.Range("A1:B" & lastRow)
'該当月のみ抽出した範囲をセット
Dim chartRange As Range
Set chartRange = rng.Columns(1).Resize(lastRow).Offset(0, 0) _
.SpecialCells(xlCellTypeVisible)
'グラフ作成
Dim chartObj As ChartObject
Set chartObj = ws.ChartObjects.Add(Left:=350, Top:=40, Width:=350, Height:=250)
With chartObj.Chart
.ChartType = xlColumnClustered
.SetSourceData Source:=rng
.ApplyChartTemplate ThisWorkbook.Path & "\standard.crtx"
.HasTitle = True
.ChartTitle.Text = selectMonth & "月の売上推移"
End With
MsgBox "グラフを作成しました。"
End Sub
4. フォーム起動用のマクロ(ボタンに割り当て可)
Sub ShowGraphForm()
UserForm1.Show
End Sub
これをシートのボタンに割り当てれば、
ユーザーフォーム → 条件選択 → グラフ作成
という流れを完全に GUI 化できます。
5. 実務でよく使う GUI 化のパターン
| 操作したい内容 | フォームでの構成例 |
|---|---|
| 月・年度で絞りたい | ComboBox ×2 |
| グラフ種類切替 | OptionButton / ComboBox |
| グラフ色を変えたい | ColorDialog(API 連動)/ ComboBox |
| グラフ出力先を選ぶ | ListBox(シート一覧) |
| PDF出力をしたい | CheckBox「PDF出力する」 |
GUI を追加するだけで、
マクロはそのままで操作だけが高度化 できるのがポイント。
6. まとめ
ユーザーフォームやボタンを使うメリットは次の通りです。
- 誰でもワンクリックでグラフ操作できる
- マクロの中身を知らなくても使えるため、社内展開が容易
- 月・年度などの条件を 毎回選択できる柔軟性
- グラフ作成〜PDF出力などの 複数処理を一括化
実務で「自動化ツール」を作る際、
ユーザーフォームは非常に強力な手段です。
コメント