スポンサーリンク

【VBA】データ範囲の指定方法(固定/動的)|Excel VBAでグラフを自動化する基本

Excel VBAでグラフを作成する際、最も重要なのがデータ範囲の指定方法です。
固定範囲を指定する場合と、行数が変化しても対応できる動的範囲を指定する方法の2種類があります。

「毎月データが増える Excelでグラフを自動更新したい」
「VBAで柔軟なグラフ作成処理を書きたい」

そんなときに必須となる知識です。本記事では、固定範囲と動的範囲の指定方法を丁寧に解説します。


スポンサーリンク

1. 固定範囲を指定する基本方法

まずは、決まったセル範囲をグラフに設定する方法です。

● 固定範囲の指定イメージ

Dim chtObj As ChartObject
Set chtObj = ActiveSheet.ChartObjects.Add(100, 50, 400, 250)

With chtObj.Chart
    .SetSourceData Source:=Range("A1:B6") '固定範囲
End With

上記例では、「A1:B6」の範囲をそのままデータとして設定しています。

● 固定範囲のメリット・デメリット

項目内容
メリットコードがシンプル、理解しやすい
デメリットデータが増減したときに対応できない(エラー or 範囲外)

固定データのレポートや初心者の練習には適していますが、実務で使うには不便になるケースが多いです。


スポンサーリンク

2. 動的範囲を指定する方法(データが増えても対応)

毎月データが増える帳票や、抽出結果が変動するケースでは、動的にデータ範囲を取得する必要があります。
以下では代表的な方法を紹介します。


2-1. 最終行を自動取得して範囲設定する方法

最も一般的なのは、最終行を取得して範囲を設定するやり方です。

Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行取得

Dim chtObj As ChartObject
Set chtObj = ActiveSheet.ChartObjects.Add(100, 50, 400, 250)

With chtObj.Chart
    .SetSourceData Source:=Range("A1:B" & lastRow) '動的範囲
End With

● ポイント

  • Cells(Rows.Count, "A").End(xlUp).Row で最終行を取得
  • "A1:B" & lastRow で可変範囲を作成

実務ではほぼ必須テクニックです。


2-2. Excelテーブル(ListObject)を利用する方法

データ管理に慣れている方にはテーブル化がおすすめです。
テーブルは自動拡張されるため、範囲指定がシンプルになります。

Dim lo As ListObject
Set lo = ActiveSheet.ListObjects("Table1") 'テーブル名

Dim chtObj As ChartObject
Set chtObj = ActiveSheet.ChartObjects.Add(100, 50, 400, 250)

With chtObj.Chart
    .SetSourceData lo.Range 'テーブル全体を対象に
End With

● テーブルのメリット

メリット
自動拡張行追加で自動的にグラフに反映
コードが短くなるRange文字列不要
メンテナンス性が高い列順変更にも対応しやすい

Excel作業の自動化と相性抜群です。


2-3. 名前付き範囲(Name Range)を使う方法

Excelの「名前の定義」機能を使い、動的名前範囲を設定する方法です。

例:OFFSET関数で範囲作成(Excel側)

=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),2)

VBAで参照する例:

With chtObj.Chart
    .SetSourceData Source:=Range("SalesRange") '名前付き範囲
End With

レガシーExcelシステムでよく使われる手法です。


スポンサーリンク

3. 動的範囲選択の注意点とおすすめ

方法難易度実務おすすめ度コメント
固定範囲★☆☆☆☆一時的な用途向け
最終行取得★★★☆☆ほとんどの案件で使用
テーブル★★★☆☆最高迷ったらコレ
名前付き範囲★★★★☆既存資産の活用に最適

スポンサーリンク

4. まとめ:柔軟なグラフ自動化には動的範囲が必須

Excel VBAでグラフを自動生成する際は、状況に応じて範囲指定を使い分けましょう。

  • 固定範囲:簡単だが変化に弱い
  • 動的範囲:最終行取得 or テーブルが実務向き
  • テーブル利用が最もメンテしやすくおすすめ

コメント

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