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% は解決 できます。
コメント