グラフを自動生成する際に最も多いトラブルの一つが、データ範囲の指定ミスです。
セル範囲のずれや空欄を含む指定ミスがあると、グラフが空白になったり、実行時エラーが発生したりします。
本記事では、VBAで安全にグラフを生成するためのデータ範囲チェック方法や、ミスを防ぐための定番パターンをまとめます。
目次
1. よくあるデータ範囲ミスのパターン
- 最終行の取得ミス
- 空白セルを含む範囲指定
- 列数・行数が合わない
- 「A列は埋まっているがB列が途中までしかない」などの不整合
- 手動入力の範囲がズレている
- シートのフィルタにより見えない行が混ざっている
まずはこれらが起こらない仕組みづくりをすることが重要です。
2. 最終行のズレを防ぐ書き方(Rows.Countの使用)
最終行を固定値で書いてしまうと、データが増減したときにグラフの範囲がズレます。
以下の方法なら安全に最終行を取得できます。
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
ここではA列に必ずデータが入る前提で取得しています。
データ列が変わる場合は対象列を柔軟に指定します。
3. データ欠損による範囲不整合をチェックする
グラフのX軸(カテゴリ)列とY値(系列)列の行数が一致していないと、グラフが正しく描画されません。
以下のように行数を比較することで、事前にエラーを回避できます。
Dim catLast As Long, valLast As Long
catLast = Cells(Rows.Count, "A").End(xlUp).Row
valLast = Cells(Rows.Count, "B").End(xlUp).Row
If catLast <> valLast Then
MsgBox "カテゴリ列と値列で行数が一致していません。データを確認してください。", vbExclamation
Exit Sub
End If
4. 空白を含む範囲指定の防止(CurrentRegionの活用)
データが表形式で揃っている場合は、CurrentRegion を使用すると、空白セルの混入ミスを防げます。
Dim dataRange As Range
Set dataRange = Range("A1").CurrentRegion
ただし、途中に空白列・空白行がある場合は範囲がそこで切れるため注意が必要です。
5. グラフ作成前に範囲が有効かをチェックする(セル数・行数チェック)
空白範囲や1行だけのデータを指定してしまうと、グラフは作成されません。
If dataRange.Rows.Count < 2 Then
MsgBox "データ範囲が正しく取得できませんでした。", vbExclamation
Exit Sub
End If
6. 実務で使える安全なグラフ範囲取得のテンプレート
下記は、データの行数チェックと範囲セットをまとめた安全な書き方です。
Sub CreateChartSafe()
Dim ws As Worksheet
Dim lastRow As Long
Dim dataRange As Range
Dim chtObj As ChartObject
Set ws = ActiveSheet
'最終行取得(A列基準)
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'データ範囲が足りない場合は中断
If lastRow < 2 Then
MsgBox "データが不足しています。", vbExclamation
Exit Sub
End If
'範囲設定
Set dataRange = ws.Range("A1:B" & lastRow)
'既存のグラフを削除する場合(重複防止)
For Each chtObj In ws.ChartObjects
chtObj.Delete
Next chtObj
'グラフ作成
Set chtObj = ws.ChartObjects.Add(Left:=300, Top:=50, Width:=400, Height:=300)
chtObj.Chart.SetSourceData dataRange
End Sub
7. 実務でのチェックポイントまとめ
| 項目 | 確認内容 |
|---|---|
| 最終行の取得方法 | Rows.Count + End(xlUp) を使用しているか |
| カテゴリ列と値列の行数一致 | 行数が一致しないとグラフが壊れる |
| 空白行・列による切断 | CurrentRegionの使用可否を判断 |
| 1行データの誤指定 | グラフは描画されないためチェック必要 |
| グラフ作成前の範囲検証 | 空白・不整合の防止 |
コメント