【VBA】ユーザーフォームやボタンと組み合わせて操作性を上げる

VBA でグラフを扱う際、
「毎回コードを書き換えて実行するのが面倒」
「他のメンバーにも簡単に操作してほしい」
というニーズがよくあります。

そこで効果を発揮するのが、
「ユーザーフォーム(GUI)」や「シート上のボタン」 との連携です。


スポンサーリンク

1. ボタンを使ってワンクリックでグラフ更新する仕組み

もっとも簡単な操作性改善は、
シートに配置したボタンにマクロを割り当てる方法 です。

▼ ボタンの設定手順

  1. 開発タブ →「挿入」→ フォームコントロールの「ボタン」
  2. 任意の位置に配置
  3. 表示されたマクロ一覧から「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出力などの 複数処理を一括化

実務で「自動化ツール」を作る際、
ユーザーフォームは非常に強力な手段です。

コメント

タイトルとURLをコピーしました