「Excelの表範囲を変更して、常にグラフを最新にしたい…」
そんな風に考えたことはありませんか?

・グラフを常に最新にするにはどうしたらいい…
・VBAを使えば簡単にできるのかな?



これらの問題を解決してくれるのが
「VBAのUNIONメソッドを使用したグラフ更新」です!
Excelのグラフ作成は便利ですが、データが更新されるたびに手動でグラフ範囲を変更するのは面倒ですよね。
「もっと簡単にグラフを自動更新できたら…」と悩んでいる方も多いはず。
この記事では、 VBAとUNIONメソッドを使ってエクセルのグラフを自動更新する方法を初心者向けにわかりやすく解説します。
少しのコードを追加するだけで、Excel作業がグッと効率的になりますよ!
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
この記事で「できるようになる」こと
この記事を読むことで、次のことが分かるようになります。
- グラフ更新ができると何が便利なのか?を確認する
- グラフ更新機能を実現するために、必要な基礎知識を確認する
- どのような設定をしたらグラフ更新ができるのか?方法を確認する
- 実際にグラフが更新されるか?確認してみよう
- グラフ更新のコードを使用する際の注意ポイントを確認しよう
グラフを自動更新できたらどんなことができるのか?
グラフを自動更新できるようになると、日々のExcel作業を効率化することができます。
手動で範囲を変更する手間がなくなり、データの追加に応じて常にグラフが最新の状態に保たれるため、作業ミスを防止できます。
さらに、レポート作成やデータ分析がスムーズに進むようになります。
- データ追加時の手間を大幅削減
- データ入力後、グラフが自動で最新状態に更新されるので、手動で範囲を変更する必要がありません。
繰り返しの作業から解放され、他の業務に集中できます。
- データ入力後、グラフが自動で最新状態に更新されるので、手動で範囲を変更する必要がありません。
- 定期レポート作成がスムーズに
- 毎週や毎月、新しいデータを追加するだけでグラフが自動的に完成します。
更新作業にかかる時間が短縮され、正確で効率的なレポート作成が可能です。
- 毎週や毎月、新しいデータを追加するだけでグラフが自動的に完成します。
- リアルタイムでデータ分析が可能
- データが変化するたびにグラフへ即座に反映されるので、リアルタイムで状況を把握できます。
販売実績や在庫状況を視覚化し、迅速な意思決定に役立ちます。
- データが変化するたびにグラフへ即座に反映されるので、リアルタイムで状況を把握できます。
- 大量データもラクに管理
- 長期データや大規模なトレンド分析でもストレスなく対応可能です。
一貫性を保ちながら、データ管理がより効率的になります。
- 長期データや大規模なトレンド分析でもストレスなく対応可能です。
- 初心者でも簡単に作業効率アップ
- 難しい知識がなくてもコピペで実践可能です。
一度設定すれば、その後はほぼ自動で更新が完了します。作業効率化の第一歩として最適です!
- 難しい知識がなくてもコピペで実践可能です。
VBAでグラフを自動更新するための基本機能を解説
Excelのグラフを自動更新するには、以下のステップを実行します。
これを設定すれば、データが更新されてもグラフが常に最新の状態に保たれるので、作業効率が大幅に向上します!



具体的には、どのようにしてグラフを更新するの?



次の3つのステップで簡単に実現できますよ。
- ステップ1 : データが追加されたときに最後の行を特定する
- VBAを使うと、指定した列の最後のデータ行を簡単に検出できます。
これにより、更新データの範囲を特定できます。
ステップ1を見る
- VBAを使うと、指定した列の最後のデータ行を簡単に検出できます。
- ステップ2 : UNIONメソッドを使ってグラフのデータ範囲を動的に更新する
- UNIONメソッドを活用して、複数のセル範囲を動的に結合します。
これで、更新されたデータをグラフの対象に含めることが可能です。
ステップ2を見る
- UNIONメソッドを活用して、複数のセル範囲を動的に結合します。
- ステップ3 : グラフのデータ範囲をボタンで更新する
- ここでは、 ボタンをクリックするだけでグラフのデータ範囲が自動更新 される仕組みを作成します。
Excel初心者でも簡単に実行できるよう、マクロとボタンを連動させる方法を解説します!
ステップ3を見る
- ここでは、 ボタンをクリックするだけでグラフのデータ範囲が自動更新 される仕組みを作成します。
以下で、具体的なコード例と手順を見ていきましょう!


ステップ1 : データが追加されたときに最後の行を特定する
まずは最終行の特定方法を確認しましょう。
新しいデータが追加されたとき、VBAで 「最終行」 を特定する必要があります。
以下のコードを使うと、指定した列の最後の行を取得できます。
Sub FindLastRow()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets("Sheet1") '// 対象のシートを指定
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '// A列の最終行を特定
MsgBox "最終行は: " & lastRow
End Sub
ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
を使えば、A列のデータがある最終行を簡単に取得できます。- 対象列を変更したい場合は、
"A"
を他の列(例:”B”)に変更します。


最終行の取得について、もっと知りたい方は別記事で詳しく解説を行っています。
合わせてご確認ください。


ステップ2 : UNIONメソッドを使って新しいデータ範囲を動的に作成する
次に、UNIONメソッドを活用して、新しく追加されたデータを含む範囲を動的に拡張します。
以下のコードは、1つのグラフを対象とした例です。グラフが複数ある場合のコードについては後述します。
コード例:1つのグラフを自動更新する場合
Sub UpdateChartRange()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim newRange As Range
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets("Sheet1") '// 対象のシートを指定
Set chartObj = ws.ChartObjects("グラフ 1") '// 対象のグラフを指定
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '// A列の最終行を取得
'// データ範囲を動的に作成
Set newRange = Union(ws.Range("A1:A" & lastRow), ws.Range("B1:B" & lastRow))
'// グラフのデータソースを更新
chartObj.Chart.SetSourceData Source:=newRange
MsgBox "グラフのデータ範囲を更新しました!"
End Sub
コード例:グラフごとに異なる列を設定したい場合
Sub UpdateAllChartsCustom()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim newRange As Range
Dim lastRow As Long
'// 対象のシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
'// データの最終行を特定(ここではA列を基準)
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'// シート上のすべてのグラフに対して処理を実行
For Each chartObj In ws.ChartObjects
'// グラフごとに条件を指定
Select Case chartObj.Name
Case "グラフ 1"
'// グラフ 1 には列Aと列Bを設定
Set newRange = Union(ws.Range("A1:A" & lastRow), ws.Range("B1:B" & lastRow))
Case "グラフ 2"
'// グラフ 2 には列Aと列Cを設定
Set newRange = Union(ws.Range("A1:A" & lastRow), ws.Range("C1:C" & lastRow))
Case Else
'// その他のグラフには列Aと列Dを設定
Set newRange = Union(ws.Range("A1:A" & lastRow), ws.Range("D1:D" & lastRow))
End Select
'// グラフのデータ範囲を更新
chartObj.Chart.SetSourceData Source:=newRange
Next chartObj
'// 完了メッセージ
MsgBox "すべてのグラフのデータ範囲を更新しました!"
End Sub
※本記事では、初心者にも分かりやすいように、グラフ1つの場合のコードを中心に解説しています。
複数のグラフを扱う場合のコードは、応用例として参考にしてください。
- UNIONメソッドを使って、複数の範囲(例:列Aと列B)を一つに結合しています。
SetSourceData
を使って、グラフのデータ範囲を更新します。


Unionメソッド及びグラフ操作について、もっと知りたい方は別記事で詳しく解説を行っています。
合わせてご確認ください。




ステップ3 : グラフのデータ範囲をボタンで更新する
このマクロが実行されるボタンをシートにセットしましょう。
このボタンをクリックすると、以下の動作が行われます。
クリックしてボタンの設置方法を見る
- 「開発」タブをクリックします。
- 「挿入」をクリックします。
- 「ボタン (フォームコントロール)」をクリックします。
- 適当なセルをクリックしながらドロップする。
- 「マクロの登録」画面から先ほどコピペしたコード「UpdateChartRange」を選択。
- 「OK」をクリックします。
- 作成できた「ボタン」の上で右クリックを行います。
- 「テキストの編集 (x)」をクリックして、ボタンの名称を変更できるようにします。
- ボタンの名称を任意の名称に変更します。
- これで設定完了です。
- 最終行の検出
- データ範囲の末尾を特定します。
- UNIONメソッドで範囲を動的に更新
- 列Aと列Bのデータを結合。
- グラフの自動更新
- 新しいデータ範囲がグラフに反映されます。
「グラフのデータ範囲が更新されました!」というメッセージが表示されれば完了です。
- 新しいデータ範囲がグラフに反映されます。


Excelのグラフを自動更新する設定方法をもう一度確認
ここまででご紹介した内容を、もう一度簡潔に確認してみましょう。
以下の手順を実行することで、グラフが常に最新の状態を維持できる仕組みを構築できます!
コードの記載箇所 | 「標準モジュール」に記載します
下記のコードは、標準モジュールに記載する必要があります。


クリックして標準モジュールの追加方法を見る
- 「開発タブ」をクリックします。
- 「Visual Basic」をクリックし、VBAエディタを開きます。
※「Alt + Basic」を押しても問題ありません。 - 左の空白部で「右クリック」を行います。
- 開いたメニューから「挿入 (N)」を選択します。
- その中の「標準モジュール (M)」をクリックすることで、新規で標準モジュールを作成することができます。
VBAコード | グラフを自動更新する
下記コードを、標準モジュールに記載してください。
Sub UpdateChartRange()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim newRange As Range
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets("Sheet1") '// 対象のシートを指定
Set chartObj = ws.ChartObjects("グラフ 1") '// 対象のグラフを指定
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '// A列の最終行を取得
'// データ範囲を動的に作成
Set newRange = Union(ws.Range("A1:A" & lastRow), ws.Range("B1:B" & lastRow))
'// グラフのデータソースを更新
chartObj.Chart.SetSourceData Source:=newRange
MsgBox "グラフのデータ範囲を更新しました!"
End Sub
ボタンの設置方法
このコードを使うには、ボタンを作成してコードに関連付ける必要があります。
以下の手順でボタンを設置してください。
クリックしてボタンの設置方法を見る
- 「開発」タブをクリックします。
- 「挿入」をクリックします。
- 「ボタン (フォームコントロール)」をクリックします。
- 適当なセルをクリックしながらドロップする。
- 「マクロの登録」画面から先ほどコピペしたコード「UpdateChartRange」を選択。
- 「OK」をクリックします。
- 作成できた「ボタン」の上で右クリックを行います。
- 「テキストの編集 (x)」をクリックして、ボタンの名称を変更できるようにします。
- ボタンの名称を任意の名称に変更します。
- これで設定完了です。
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
それでは実際にExcelでグラフを自動更新されるのか試してみよう!
それでは、実際にこのコードを活用して、エクセルのグラフが自動更新されるか確認してみましょう。
手順1:グラフを作成する
表を準備しましょう
まず、以下の表を使用してグラフを作成しましょう。
日付 | 売上 |
---|---|
2024/01 | 25600 |
2024/02 | 55000 |
2024/03 | 71500 |
2024/04 | 95200 |
2024/05 | 51100 |
2024/06 | 62800 |
2024/07 | 62800 |
2024/08 | 75900 |
2024/09 | 73900 |
2024/10 | 20500 |
2024/11 | 71900 |
2024/12 | 50500 |
グラフを準備する
- A列をX軸(カテゴリ)として、B列のデータをY軸に設定した折れ線グラフを作成します。
- グラフに適当な名前を付けます(例:
グラフ 1
)。


手順2:表にデータを追加
次に、表に新しいデータを追加します。
以下の2つのデータを追記してください。
日付 | 売上 |
---|---|
2024/01 | 25600 |
2024/02 | 55000 |
2024/03 | 71500 |
2024/04 | 95200 |
2024/05 | 51100 |
2024/06 | 62800 |
2024/07 | 62800 |
2024/08 | 75900 |
2024/09 | 73900 |
2024/10 | 20500 |
2024/11 | 71900 |
2024/12 | 50500 |
2025/01 | 30200 |
2025/02 | 85500 |
手順3:コードを実行してグラフを更新してみよう
ボタンをクリックして、VBAコードを実行します。
これにより、表に追加したデータがグラフに自動的に反映されます。
「グラフのデータ範囲が更新されました!」というメッセージが表示されれば成功です!


グラフの自動更新を実行する際の注意ポイント
グラフ自動更新のコードを実行する際には、いくつかの注意点があります。
以下を確認して、エラーや問題を回避しましょう!
注意1:UNIONメソッドで結合するデータ範囲のフォーマットに注意
UNIONメソッドで結合する範囲は、以下の条件を満たす必要があります。
これらを満たさない場合、エラーが発生する可能性があるので注意しましょう。
- 同じ行数
- 結合する範囲(例:列Aと列B)は、行数が一致している必要があります。
行数が異なる場合、「型が一致しない」というエラーが発生する可能性があります。
- 結合する範囲(例:列Aと列B)は、行数が一致している必要があります。
- 同じデータフォーマットであること
- データ型やセル形式(数値、文字列など)が異なると、予期しない挙動を起こす場合があります。
データを結合する前にフォーマットを統一してください。
- データ型やセル形式(数値、文字列など)が異なると、予期しない挙動を起こす場合があります。
注意ポイント2:グラフの種類に適用できないケースがある
UNIONメソッドで結合したデータ範囲は、すべてのグラフタイプに適用できるわけではありません。
特に以下の点に注意が必要です。
- 「円グラフ」や「積み上げ棒グラフ」など、一部のグラフでは適用できない場合があります。
- 必要に応じて、適用可能なグラフタイプ(折れ線グラフなど)に変更するか、コードを調整してください。
注意ポイント3. グラフの名前を必ず確認する
VBAコード内で指定するグラフの名前(例:「グラフ 1」)は、Excel上で実際に設定されている名前と一致している必要があります。
- Excelのグラフ名は、グラフを選択するとリボン上の「名前ボックス」に表示されます。
この記事のまとめ
この記事では、Excel VBAを使って表データが更新されてもグラフが自動的に最新状態になるようにする方法を解説しました。
初心者でも簡単に実践できるよう、ステップごとに丁寧に解説し、応用例もご紹介しました。
ポイントのおさらい
- グラフ更新ができると何が便利なのか?を理解しよう
- 手動で範囲を更新する必要がなくなり、効率的なデータ管理やレポート作成が可能になるメリットについて解説しました。
⇒ 「グラフを自動更新できたらどんなことができるのか?」をもう一度見る
- 手動で範囲を更新する必要がなくなり、効率的なデータ管理やレポート作成が可能になるメリットについて解説しました。
- グラフ自動更新を実現する基本知識を確認
- VBAを使用して最後の行を検出する方法(最終行の取得)を解説しました。
- UNIONメソッドを活用してデータ範囲を動的に結合する方法を解説しました。
⇒ 「VBAでグラフを自動更新するための基本機能を解説」をもう一度見る
- 実際の設定手順とコードを確認
- コードを標準モジュールに記載する方法を解説しました。
- ボタンを作成し、クリックで自動更新を実行する仕組みを作る方法を解説しました。
⇒ 「Excelのグラフを自動更新する設定方法をもう一度確認」をもう一度見る
- グラフが複数の場合の応用例
- For Eachを使った汎用的なコードや、グラフごとに異なる列を設定する方法を解説しました。
⇒ 「コード例:グラフごとに異なる列を設定したい場合」をもう一度見る
- For Eachを使った汎用的なコードや、グラフごとに異なる列を設定する方法を解説しました。
- 実際にグラフを更新してみよう
- データを追加し、コードを実行して自動的にグラフが更新される様子を確認する手順を解説しました。
⇒ 「それでは実際にExcelでグラフを自動更新されるのか試してみよう!」をもう一度見る
- データを追加し、コードを実行して自動的にグラフが更新される様子を確認する手順を解説しました。
- グラフ自動更新の注意ポイントを理解する
- UNIONメソッドで結合するデータ範囲の条件や、グラフの種類ごとの適用可否について注意ポイントを説明しました。
⇒ 「グラフの自動更新を実行する際の注意ポイント」をもう一度見る
- UNIONメソッドで結合するデータ範囲の条件や、グラフの種類ごとの適用可否について注意ポイントを説明しました。
さらに学ぶために
今回のVBAコードをマスターすることで、データの更新に合わせてグラフを自動で最新の状態に保つ仕組みを構築できるようになりました。
次のステップとして、さらに応用的な内容にも挑戦してみましょう!

