ExcelVBAでグラフの範囲を変更する
同じ見た目のグラフを範囲だけ変えていっぱい作りたい!っていう作業を簡単にしたくて組んでみました。
追記
もうちょっと簡単な方法を書きましたので、こっちのほうが分かりやすいかと思います。
以下、残しておきますので何かの参考にされたら幸いです。
グラフの設定範囲の変更はハンパなくめんどくさい
最新のバージョンは分かりませんが、グラフの範囲って絶対参照になっちゃうし、後から変更しようと思うとほんとーに大変です。そんなことをちまちまやっている時間は非常にもったいないので、できるだけ自動化して楽したいものです。
こんな感じのグラフで説明してみます。これを、範囲を変えていっぱい作りたいことにします。
基本項目をチェック
後で「?」ってなる前に押さえておきましょう。行は左横の数字、列は縦のアルファベットのことで、プログラム上ではアルファベットを数値に置き換えます。こちらの記事も参考にどうぞ。
コード
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点です。
現在参照している、又はこれから参照するセルが空白だった場合、“SeriesクラスのValuesプロパティを設定できません”というエラーが出てきてしまうので、DisplayBlanksAs
を使うと良いようです。
http://wue.sakura.ne.jp/orefaq/#20-40040
グラフの名前は、グラフを右クリック→グラフウインドウから調べられます。グラフの番号がよく分からない場合は、15行目をとっぱらって、手動でアクティブにしておいて実行してみるといいかと思います。
手間のかかる無駄な仕事はどんどん自動化してしまいましょう!
ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。