【VBA】グラフが表示されない・空白になるときの確認点

VBA でグラフを作成・更新していると、
「グラフが真っ白になる」「何も表示されない」「範囲を変更したのに反映されない」
といったトラブルが非常に多く発生します。

ここでは 実務で必ず確認すべきポイント を体系的に整理し、
原因と対処方法を解説します。


1. データ範囲に数値以外が混ざっていないか確認する

グラフの系列には 数値が必須 です。

▼ よくあるNG例

  • 空白セルが途中に含まれる
  • 数字のように見えて実は文字列
  • 「-」「—」「N/A」などの記号入り
  • 関数で “”(空文字)が返っている

▼ 対処コード例(文字列→数値変換)

Sub FixNumberFormat()
    Dim rng As Range
    Set rng = Range("B2:B100")

    Dim c As Range
    For Each c In rng
        If IsNumeric(c.Value) Then
            c.Value = CDbl(c.Value)
        End If
    Next c
End Sub

データ整形が必要な場合、
グラフを更新する前に上記の処理を挟むと安定します。


2. SeriesCollection の参照先が正しいか確認する

グラフが空白の場合、
SeriesCollection の対象範囲がズレている ケースが圧倒的に多いです。

▼ よくあるミス

.SeriesCollection(1).Values = ws.Range("B2:B1") '逆転して範囲ゼロ

や、

.SeriesCollection(1).XValues = ws.Range("A2:A1000") '値の数と不一致

など。

▼ 値と軸ラベル(XValues)の数は必ず一致させる

.SeriesCollection(1).XValues = ws.Range("A2:A" & lastRow)
.SeriesCollection(1).Values = ws.Range("B2:B" & lastRow)

軸とデータの幅が合わないとグラフが表示されない 主因になります。


3. データの最終行取得が正しいか確認する

最終行の取得ミスはかなり多く、
グラフが空白になる “代表的な原因” です。

▼ ありがちなミス例

最終行を A 列で調べているのに
実際のデータは B 列までしか入っていないなど。

▼ 正しい最終行取得例

lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

異なる列で最終行がズレないように、
グラフ化の基準となる列を固定して取得 してください。


4. グラフの元データがフィルタで非表示になっていないか確認する

Excel のフィルタで非表示セルがあると、
グラフが空白または部分表示になることがあります。

▼ フィルタ解除コード

If ws.FilterMode Then ws.ShowAllData

グラフ更新前に必ず残しておくと安心です。


5. グラフが別シートのセル参照で壊れていないか確認する

別シートをまたぐデータ参照は、
シート名変更や行列の移動で簡単に切れてしまいます。

▼ シート名変更で参照切れ例

=Sheet1!$A$2:$A$10 → Sheet1 が削除、または名前変更 → 空白に

▼ シート名を動的に参照する方法

.SeriesCollection(1).Values = Sheets("Data").Range("B2:B" & lastRow)

Range アドレスではなく、オブジェクトを介して参照する のが安全です。


6. グラフタイプの変更直後にデータが消えることがある

グラフタイプを変えた瞬間に、
SeriesCollection が削除されるケースがあります。

▼ グラフタイプ → データ再設定が安全

With chartObj.Chart
    .ChartType = xlColumnClustered
    .SetSourceData ws.Range("A1:B" & lastRow)
End With

先にタイプを変更 → 後でデータ設定
という順序がトラブルを防ぎます。


7. グラフが更新されているのに画面が反映されない場合

Excel の再描画が遅延しているだけのケース。

▼ 再描画コード

DoEvents
chartObj.Chart.Refresh

または、

Application.ScreenUpdating = True

8. グラフが表示されないときのチェックリスト(保存版)

項目チェック内容
値は数値か文字列や空白が混じっていないか
XValues と Values の幅一致行数が同じか
SeriesCollection の範囲正しい範囲を指しているか
最終行取得正しい列で取得しているか
フィルタOn になっていないか
シート名参照参照切れがないか
グラフタイプ変更直後データが消えていないか
再描画更新が反映されないことがある

これをチェックすれば、
グラフが空白になる問題の 90% は解決 できます。

コメント

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