ExcelグラフをVBAで自動更新!UNIONメソッドを使った簡単な方法

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
アイキャッチ

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


グラフを常に最新にするにはどうしたらいい…

VBAを使えば簡単にできるのかな?

これらの問題を解決してくれるのが
「VBAのUNIONメソッドを使用したグラフ更新」です!


Excelのグラフ作成は便利ですが、データが更新されるたびに手動でグラフ範囲を変更するのは面倒ですよね。
「もっと簡単にグラフを自動更新できたら…」と悩んでいる方も多いはず。

この記事では、 VBAとUNIONメソッドを使ってエクセルのグラフを自動更新する方法を初心者向けにわかりやすく解説します。

少しのコードを追加するだけで、Excel作業がグッと効率的になりますよ!


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

目次

この記事で「できるようになる」こと

この記事を読むことで、次のことが分かるようになります。

スポンサーリンク

グラフを自動更新できたらどんなことができるのか?

グラフを自動更新できるようになると、日々のExcel作業を効率化することができます。

手動で範囲を変更する手間がなくなり、データの追加に応じて常にグラフが最新の状態に保たれるため、作業ミスを防止できます。
さらに、レポート作成やデータ分析がスムーズに進むようになります。

グラフを自動更新できたら、こんなことが簡単に!
  • データ追加時の手間を大幅削減
    • データ入力後、グラフが自動で最新状態に更新されるので、手動で範囲を変更する必要がありません。
      繰り返しの作業から解放され、他の業務に集中できます。
  • 定期レポート作成がスムーズに
    • 毎週や毎月、新しいデータを追加するだけでグラフが自動的に完成します。
      更新作業にかかる時間が短縮され、正確で効率的なレポート作成が可能です。
  • リアルタイムでデータ分析が可能
    • データが変化するたびにグラフへ即座に反映されるので、リアルタイムで状況を把握できます。
      販売実績や在庫状況を視覚化し、迅速な意思決定に役立ちます。
  • 大量データもラクに管理
    • 長期データや大規模なトレンド分析でもストレスなく対応可能です。
      一貫性を保ちながら、データ管理がより効率的になります。
  • 初心者でも簡単に作業効率アップ
    • 難しい知識がなくてもコピペで実践可能です。
      一度設定すれば、その後はほぼ自動で更新が完了します。作業効率化の第一歩として最適です!

VBAでグラフを自動更新するための基本機能を解説

Excelのグラフを自動更新するには、以下のステップを実行します。

これを設定すれば、データが更新されてもグラフが常に最新の状態に保たれるので、作業効率が大幅に向上します!

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

次の3つのステップで簡単に実現できますよ。

  • ステップ1 : データが追加されたときに最後の行を特定する
    • VBAを使うと、指定した列の最後のデータ行を簡単に検出できます。
      これにより、更新データの範囲を特定できます。

      ステップ1を見る
  • ステップ2 : UNIONメソッドを使ってグラフのデータ範囲を動的に更新する
    • UNIONメソッドを活用して、複数のセル範囲を動的に結合します。
      これで、更新されたデータをグラフの対象に含めることが可能です。

      ステップ2を見る
  • ステップ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”)に変更します。
最終行の求めた結果

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

あわせて読みたい
VBAで最終行と最終列を簡単に取得する方法|セル番号や値の取得も完全網羅 「Excel VBAで、データの最終行や最終列を取得したいけど、どうやってやるのだろう...」そんな疑問を持っていませんか? ・もう手動で表の終わりを探したくない!・...

ステップ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メソッドでグラフを更新

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

あわせて読みたい
VBA Unionメソッドの使い方徹底解説!複数セル範囲を効率的に操作する方法 「Excel VBAで複数のセル範囲を一度に選択したいけど、どうやってやるんだろう?」このような悩みを持ったことはありませんか? ・複数のセル範囲を一括で操作したいけ...
あわせて読みたい
Excel VBA ChartObjectの基本|グラフ作成の手順とコードを解説 「VBAでグラフを作成するにはどうしたらいいのだろう?」そんな疑問をお持ちではありませんか? ・Excelで毎回手作業でグラフを作るのが面倒…・VBAを使って自動でグラフ...

ステップ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講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

スポンサーリンク

それでは実際にExcelでグラフを自動更新されるのか試してみよう!

それでは、実際にこのコードを活用して、エクセルのグラフが自動更新されるか確認してみましょう。

手順1:グラフを作成する

表を準備しましょう

まず、以下の表を使用してグラフを作成しましょう。

スクロールできます
日付売上
2024/0125600
2024/0255000
2024/0371500
2024/0495200
2024/0551100
2024/0662800
2024/0762800
2024/0875900
2024/0973900
2024/1020500
2024/1171900
2024/1250500

グラフを準備する

  1. A列をX軸(カテゴリ)として、B列のデータをY軸に設定した折れ線グラフを作成します。
  2. グラフに適当な名前を付けます(例:グラフ 1)。
グラフを準備

手順2:表にデータを追加

次に、表に新しいデータを追加します。

以下の2つのデータを追記してください。

日付売上
2024/0125600
2024/0255000
2024/0371500
2024/0495200
2024/0551100
2024/0662800
2024/0762800
2024/0875900
2024/0973900
2024/1020500
2024/1171900
2024/1250500
2025/0130200
2025/0285500

手順3:コードを実行してグラフを更新してみよう

ボタンをクリックして、VBAコードを実行します。
これにより、表に追加したデータがグラフに自動的に反映されます。

「グラフのデータ範囲が更新されました!」というメッセージが表示されれば成功です!

グラフが更新されました。
スポンサーリンク

グラフの自動更新を実行する際の注意ポイント

グラフ自動更新のコードを実行する際には、いくつかの注意点があります。

以下を確認して、エラーや問題を回避しましょう!

注意1:UNIONメソッドで結合するデータ範囲のフォーマットに注意

UNIONメソッドで結合する範囲は、以下の条件を満たす必要があります。
これらを満たさない場合、エラーが発生する可能性があるので注意しましょう。

UNIONメソッドの条件
  • 同じ行数
    • 結合する範囲(例:列Aと列B)は、行数が一致している必要があります。
      行数が異なる場合、「型が一致しない」というエラーが発生する可能性があります。
  • 同じデータフォーマットであること
    • データ型やセル形式(数値、文字列など)が異なると、予期しない挙動を起こす場合があります。
      データを結合する前にフォーマットを統一してください。

注意ポイント2:グラフの種類に適用できないケースがある

UNIONメソッドで結合したデータ範囲は、すべてのグラフタイプに適用できるわけではありません。
特に以下の点に注意が必要です。

グラフの種類に注意
  • 「円グラフ」や「積み上げ棒グラフ」など、一部のグラフでは適用できない場合があります。
  • 必要に応じて、適用可能なグラフタイプ(折れ線グラフなど)に変更するか、コードを調整してください。

注意ポイント3. グラフの名前を必ず確認する

VBAコード内で指定するグラフの名前(例:「グラフ 1」)は、Excel上で実際に設定されている名前と一致している必要があります。

ヒント
  • Excelのグラフ名は、グラフを選択するとリボン上の「名前ボックス」に表示されます。
スポンサーリンク

この記事のまとめ

この記事では、Excel VBAを使って表データが更新されてもグラフが自動的に最新状態になるようにする方法を解説しました。

初心者でも簡単に実践できるよう、ステップごとに丁寧に解説し、応用例もご紹介しました。

ポイントのおさらい

さらに学ぶために

今回のVBAコードをマスターすることで、データの更新に合わせてグラフを自動で最新の状態に保つ仕組みを構築できるようになりました。

次のステップとして、さらに応用的な内容にも挑戦してみましょう!

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「JavaScr...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次