グラフを作成するときに「複数のシートの値を使ってグラフを作成したい!」というときがありますよね。
でも、同じシートの値だけで作る時とは違って、うまくグラフが作れないことが多々あります。
なので、本記事では「複数のシートの値を使ってグラフを作成する」を解説していきます。
本記事では下の「田中太郎」「佐藤次郎」「鈴木三郎」「佐々木望」の4つの人名の入ったシートを使います。
複数のシートの値を使ってグラフを作成する
今回は「国語・数学・英語の3つの科目ごとに4人の点数を比較するグラフを作成する」という内容で書いていきます。
それが実現できるコードは下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Sub sample1() Dim names(1 To 4) As String names(1) = "田中太郎" names(2) = "佐藤次郎" names(3) = "鈴木三郎" names(4) = "佐々木望" Dim ColumnNames(1 To 3) As String ColumnNames(1) = "国語" ColumnNames(2) = "数学" ColumnNames(3) = "英語" ' --- 科目ごとに点数をまとめた配列を配列に格納する Dim cnt1 As Long, cnt2 As Long Dim graphValue(1 To 4) As Long Dim graphValues(1 To 3) As Variant For cnt1 = LBound(ColumnNames) To UBound(ColumnNames) For cnt2 = LBound(names) To UBound(names) graphValue(cnt2) = Sheets(names(cnt2)).Cells(cnt1, 2) Next cnt2 graphValues(cnt1) = graphValue Next cnt1 ' --- グラフを表示するシートを追加する Dim newWS As Worksheet Worksheets.Add Before:=Worksheets(1) Set newWS = ActiveSheet newWS.name = "各科目ごとのグラフ" ' --- 各科目のグラフを作成する Dim cnt3 As Long For cnt3 = LBound(graphValues) To UBound(graphValues) With newWS.ChartObjects.Add(10, 10, 300, 200).Chart.SeriesCollection.NewSeries .name = ColumnNames(cnt3) ' グラフのタイトル名 .Values = graphValues(cnt3) ' グラフの値 .XValues = names ' グラフ横軸の値 End With Next End Sub |
上のコードの重要なポイントは下の通りです。
16~25行目:今回は科目ごとにグラフを作成するので、科目ごとに4人の点数をまとめた配列を作る処理となっている。
配列に値を格納する理由は「SeriesCollectionオブジェクトでグラフを作成するときに配列で渡すと楽」だからです。
ちなみにここの処理で作られた配列のイメージは下の通りです。
35~42行目:科目ごとにグラフを作成している。
1科目ごとにグラフを作るので、上の39行目のように配列の1要素ずつ渡していく。
上のコードを実行すると下のような結果が得られます。
〇おすすめのVBA参考書ランキング!
1位 | 2位 | 3位 |
---|---|---|
Excel VBA 脱初心者のための集中講座 | パーフェクトExcel VBA | ExcelVBA 実戦のための技術 |
初心者~中級者 | 中級者 | 初心者~中級者 |
【初心者が手に取るべき参考書】 ・「書籍+動画」で圧倒的に理解しやすい入門書になっている。 ・丁寧で詳しい解説でボリューム感がある。 | 【より深い理解をしたい方にお勧めな参考書】 ・テーマに対して丁寧な解説・適度な深さで解説されている。 ・幅広くテーマを扱っていることから、基礎知識をあらかた網羅できる。 | 【入門書と一緒に買うべき参考書】 ・1つ1つのテーマを経験豊富なエンジニア視点で解説してくれている。 ・実践的で効果的なコードの書き方が理解できる。 |
【読んでみた一言】 正直、入門書はコレ一冊でいいかも。あとは中級者用の参考書に進むべし。 | 【読んでみた一言】 深く書かれているが、少々専門的に書かれていることから、読む前に数冊の入門書を読破したほうが良い。 | 【読んでみた一言】 基礎知識を持っている人が次のレベルに達するきっかけを与えてくれる参考書である。 |
スポンサーリンク