今回はボタン1つでグラフを作成・更新できるマクロを紹介したいと思います。
パワポで資料を作成するとき等に役立つと思いますので、是非参考にしていただければと思います!
過去に、VBAに関する記事を投稿していますので、是非こちらも併せてご覧ください!
![](https://masashi-blog418.com/wp-content/uploads/2022/04/joanna-kosinska-uGcDWKN91Fs-unsplash-160x90.jpg)
![](https://masashi-blog418.com/wp-content/uploads/2022/04/james-harrison-vpOeXr5wmR4-unsplash-160x90.jpg)
前準備
マクロを使用する前に事前に準備しておくもものが3点あります。それが、
- VBAを使用できるようにしておく(開発タブを表示させておく)
- グラフを準備する
- データを準備する
に、なります。至極当然なことですね、はい(笑)
上記3つがないとマクロが使えない・動かなくなってしまいますので、それぞれ順を追って説明します。
VBAを使用できるようにしておく(開発タブを表示させておく)
今回はマクロを使用しますので、先にVBAが使える状態にしておきます。
VBAを使えるようにする方法については過去の記事で紹介していますので、こちらをご覧ください!
グラフを準備する
次にグラフを挿入します。グラフを挿入するには、「挿入」タブ→「グラフ」グループから挿入することが出来ます。
![グラフを準備する_1](https://masashi-blog418.com/wp-content/uploads/2022/08/image-1-1024x258.png)
今回は「2-D 縦棒」内の集合縦棒を使用します。オーソドックスな棒グラフですね。
![グラフを準備する_2](https://masashi-blog418.com/wp-content/uploads/2022/08/image.png)
データを準備する
最後にグラフで使うデータを準備します。
今回は以下のデータを使用します。商品ごとに値段が表示されているものです。
![データを準備する_1](https://masashi-blog418.com/wp-content/uploads/2022/08/image-4.png)
以上で前準備は完了になります。
コードの紹介
それではコードの紹介です。
Sub MakeGraph()
Dim MySht As Worksheet
Dim objChart As Object
Application.ScreenUpdating = False
Set MySht = ThisWorkbook.Worksheets("グラフ") 'グラフシートを取得
Set objChart = MySht.ChartObjects(1) 'グラフエリアを取得
With objChart.Chart
.ChartArea.ClearContents 'グラフの中身だけ削除
.SetSourceData MySht.Range(MySht.Cells(8, 11), MySht.Cells(Rows.Count, 12).End(xlUp)) 'データ範囲の指定
.HasTitle = True 'グラフタイトルの有効化
.ChartTitle.Text = "各商品の値段一覧" 'グラフタイトルの設定
.Axes(xlValue, 1).HasTitle = True '縦軸ラベルタイトルの有効化
.Axes(xlValue, 1).AxisTitle.Text = "値段" '縦軸ラベルタイトルの設定
.Axes(xlCategory, 1).HasTitle = True '横軸ラベルタイトルの有効化
.Axes(xlCategory, 1).AxisTitle.Text = "商品" '横軸ラベルタイトルの設定
.Axes(xlValue).MaximumScale = 1000 '縦軸の最大値
.Axes(xlValue).MinimumScale = 100 '縦軸の最小値
End With
Set MySht = Nothing 'オブジェクトの解放
Set objChart = Nothing 'オブジェクトの解放
Application.ScreenUpdating = True
End Sub
標準モジュール等に上記コードを貼り付け、コードを実行するとデータを基にグラフが自動作成されます。
![コードの紹介_1](https://masashi-blog418.com/wp-content/uploads/2022/08/image-5-1024x426.png)
ソースコードについてざっくり説明すると、「objChart.Chart.ChartArea.ClearContents」でグラフの中身だけ削除し、「objChart.Chart.SetSourceData 」でグラフの基になるデータを指定してグラフを作成するようにしています。
SetSourceDataを動的に変化させる
SetSourceDataは基になるデータが固定であれば「MySht.Range(“K8:L12”)」のようにそのままセル範囲を指定してもいいのですが、実際はデータの件数が増減する場合がほとんどだと思います。
そういった場合には増やした分はグラフに反映されなくなってしまいます。
![SetSourceDataを動的に変化させる_1](https://masashi-blog418.com/wp-content/uploads/2022/08/image-6-1024x433.png)
じゃあどうやって動的にグラフを作成させるかというと、MySht.Rangeの中身を
MySht.Range(MySht.Cells(8, 11), MySht.Cells(Rows.Count, 12).End(xlUp))
とします。ポイントはMySht.Cells(Rows.Count, 12).End(xlUp)になります。
Rows.Countは最終行になります。Office365時点だと最終行は1,048,576です。
また、Cellsの後ろにEnd(xlUp)が付いていますが、これはこれを付けたセル位置そのセル位置から何かしらの値が入っているセルまで移動する、という意味になります。Endの後ろのカッコ内の値で挙動が変わり、xlUpだと上に移動します。
これを使うことでデータが増えても減っても問題なくグラフが動的に作成されるわけです。
![](https://masashi-blog418.com/wp-content/uploads/2022/08/image-8-1024x460.png)
余談ですが、Cellsを使ってセル範囲を指定する場合はR1C1参照形式にしてから指定する方がおすすめです。
R1C1参照形式については過去の記事で紹介していますので、こちらをご覧ください!
![](https://masashi-blog418.com/wp-content/uploads/2022/04/lukas-blazek-mcSDtbWXUZU-unsplash-160x90.jpg)
![](https://masashi-blog418.com/wp-content/uploads/2022/04/christin-hume-Hcfwew744z4-unsplash-160x90.jpg)
まとめ
今回はボタン1つでグラフを作成・更新できるマクロを紹介しました。
色々応用が利くと思うので、是非ご自身でカスタマイズして使っていただければと思います!
コメント