ExcelVBAでグラフの範囲を変更する

ExcelVBAでグラフの範囲を変更する

同じ見た目のグラフを範囲だけ変えていっぱい作りたい!っていう作業を簡単にしたくて組んでみました。


追記

もうちょっと簡単な方法を書きましたので、こっちのほうが分かりやすいかと思います。

以下、残しておきますので何かの参考にされたら幸いです。

グラフの設定範囲の変更はハンパなくめんどくさい

最新のバージョンは分かりませんが、グラフの範囲って絶対参照になっちゃうし、後から変更しようと思うとほんとーに大変です。そんなことをちまちまやっている時間は非常にもったいないので、できるだけ自動化して楽したいものです。

120405-1

こんな感じのグラフで説明してみます。これを、範囲を変えていっぱい作りたいことにします。

基本項目をチェック

120405-2

後で「?」ってなる前に押さえておきましょう。行は左横の数字、列は縦のアルファベットのことで、プログラム上ではアルファベットを数値に置き換えます。こちらの記事も参考にどうぞ。

コード

Sub graph_change()
  Dim stnam As String, nam_r As Integer, nam_c As Integer
  Dim st_r As Integer, st_c As Integer, en_c As Integer
  Dim graph_n As Integer, x As Integer, i As Integer

  stnam = "sheet1" 'シート名
  nam_r = 21 '項目ラベルの行
  nam_c = 2 '凡例の列
  st_r = 22 'データ開始行
  st_c = 3 'データ開始列
  en_c = 13 'データ終了列
  graph_n = 1 'グラフ番号
  x = 5 '特性の数

  ActiveSheet.ChartObjects("グラフ " & graph_n).Activate 'グラフをアクティブに
  With ActiveChart
    .DisplayBlanksAs = xlZero '空白セルでのエラー回避
    .SeriesCollection(1).XValues = "='" & stnam & "'!R" & nam_r & "C" & st_c & ":R" & nam_r & "C" & en_c '項目ラベル設定
    For i = 1 To x '特性数処理
      .SeriesCollection(i).Name = "='" & stnam & "'!R" & st_r + (i - 1) & "C" & nam_c '凡例
      .SeriesCollection(i).Values = "='" & stnam & "'!R" & st_r + (i - 1) & "C" & st_c & ":R" & st_r + (i - 1) & "C" & en_c 'データ範囲
    Next i
    .DisplayBlanksAs = xlNotPlotted
  End With
End Sub

※特性番号が1から連番になってること前提です。普通に作れば連番になってます。

6~13行目の変数の値だけ変えれば動くようになっています。変数が多くてちょっと分かりにくいですが、主に必要なのはこの3点です。

120405-3

現在参照している、又はこれから参照するセルが空白だった場合、“SeriesクラスのValuesプロパティを設定できません”というエラーが出てきてしまうので、DisplayBlanksAsを使うと良いようです。

グラフの名前は、グラフを右クリック→グラフウインドウから調べられます。グラフの番号がよく分からない場合は、15行目をとっぱらって、手動でアクティブにしておいて実行してみるといいかと思います。

手間のかかる無駄な仕事はどんどん自動化してしまいましょう!

公開日:2012/04/05

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。