前回
ken3memo.hatenablog.com
の続きです
今回は、
折れ線グラフに直値の系列を追加
してみました。
ActiveChart.SeriesCollection.NewSeries '.NewSeriesで新系列追加
で、できました。
って、何言ってんだコイツ・・・いきなり、話すすめられても?だよね。
下記、いつもの あのあの迷っているデバッグ・解説動画です。
youtu.be
https://youtu.be/W6N6afHUulY
目次 と ソースコード
00:00 挨拶、やりたいこと
00:59 TEST1 NewSeriesで系列追加
04:00 蛇足 基準の固定線を引きたい時など?
06:55 TEST2 Array で 配列を初期化
11:03 TEST3 知恵袋の質問に答えてみた
知恵袋の質問
detail.chiebukuro.yahoo.co.jp
に、
データベースから取得した
tm, in, out
1, 3, 5
2, 7, 9
3, 5, 6tm (時間の意) の横軸に対して
in, outの折れ線グラフを書きたい
のですが配列は3列一度に指定できるものなのか?、ヘッダーは無いほうが良いものなのか? を教えてほしいです。よろしくお願いします。配列はaaaに入れています。
とあったので、直接グラフを書いてみました
(※セルa1:c3など範囲にデータをセットして、
グラフを書くのが王道ですが、直接書いてみました)
サンプルの説明
TEST1
1.ActiveChart.SeriesCollection.NewSeries
.NewSeriesで新系列追加 できました。
2..Nameで系列名がセットできるみたい
ActiveChart.FullSeriesCollection(1).Name = "7月実績"
TEST2
Array で 配列を初期化して、データをセットしてみました。
TEST3
やっと、知恵袋の質問に答えてみた。
Option Explicit Sub aaa() ActiveChart.SeriesCollection.NewSeries '.NewSeriesで新系列追加 'FullSeriesCollection(2)と追加されたのは2番目で決め打ちするのも・・まぁいっか '.Nameで系列名がセットできるみたい ActiveChart.FullSeriesCollection(4).Name = "基準" '値のセット.Values Dim dataVALUE2(0 To 2) As Variant '配列も2にする、安易だね・・・ dataVALUE2(0) = 400: dataVALUE2(1) = 400: dataVALUE2(2) = 400 ActiveChart.FullSeriesCollection(4).Values = dataVALUE2 End Sub Sub TEST() Sheets.Add 'シート追加、テストで繰り返すと重なるので落ち着くまで '折れ線グラフ xlLine 追加 ActiveSheet.Shapes.AddChart2(-1, xlLine, 50, 50).Select '※ポイント1 ActiveChart.SeriesCollection.NewSeries '.NewSeriesで新系列追加 'FullSeriesCollection(1)と追加されたのは1番目で決め打ちするのも・・まぁいっか '.Nameで系列名がセットできるみたい ActiveChart.FullSeriesCollection(1).Name = "7月実績" '系列1の横軸セット .XValues Dim dataNAME(0 To 2) As Variant dataNAME(0) = "東京": dataNAME(1) = "千葉": dataNAME(2) = "神奈川" ActiveChart.FullSeriesCollection(1).XValues = dataNAME '値のセット.Values Dim dataVALUE(0 To 2) As Variant dataVALUE(0) = 200: dataVALUE(1) = 300: dataVALUE(2) = 100 ActiveChart.FullSeriesCollection(1).Values = dataVALUE 'データラベルで値の表示 いろいろあるので調整めんどう ActiveChart.FullSeriesCollection(1).Select ActiveChart.FullSeriesCollection(1).ApplyDataLabels ActiveChart.FullSeriesCollection(1).DataLabels.Select Selection.ShowValue = True 'データラベル '次の折れ線 系列の追加 '※ポイント1 ActiveChart.SeriesCollection.NewSeries '.NewSeriesで新系列追加 'FullSeriesCollection(2)と追加されたのは2番目で決め打ちするのも・・まぁいっか '.Nameで系列名がセットできるみたい ActiveChart.FullSeriesCollection(2).Name = "8月実績" '値のセット.Values Dim dataVALUE2(0 To 2) As Variant '配列も2にする、安易だね・・・ dataVALUE2(0) = 250: dataVALUE2(1) = 150: dataVALUE2(2) = 120 ActiveChart.FullSeriesCollection(2).Values = dataVALUE2 'データラベルで値の表示 いろいろあるので調整めんどう ActiveChart.FullSeriesCollection(2).Select ActiveChart.FullSeriesCollection(2).ApplyDataLabels ActiveChart.FullSeriesCollection(2).DataLabels.Select Selection.ShowValue = True 'データラベル 'せっかく.Nameで系列名セットしたので、凡例を表示 'msoElementLegendRight 101 凡例を右に表示します。 ActiveChart.SetElement (msoElementLegendRight) Range("A1").Select MsgBox "処理終了" End Sub '↑事務処理能力が低いおっさん、テストプログラム作成後に 'こんな折れ線グラフは無いことに気が付く・・・ '普通は、折れ線 Yが東京・千葉・神奈川で、 '横軸 Xが 7月,8月,9月・・かな Sub TEST2() Sheets.Add 'シート追加、テストで繰り返すと重なるので落ち着くまで Dim data系列名 As Variant '配列が0からなので注意 data系列名 = Array("東京", "名古屋", "大阪") Dim data実績 As Variant '"東京", "名古屋", "大阪"の実績 data実績 = Array(Array(100, 200, 300), _ Array(400, 500, 0), _ Array(50, 700, 250)) Dim dataX軸名 As Variant ' dataX軸名 = Array("7月実績", "8月実績", "9月予定") '折れ線グラフ xlLine 追加 ActiveSheet.Shapes.AddChart2(-1, xlLine, 50, 50).Select '3つ折れ線グラフを追加 Dim n As Integer For n = 1 To 3 'n=1からなので、配列0から注意・・・ ActiveChart.SeriesCollection.NewSeries '.NewSeriesで新系列追加 'FullSeriesCollection(n)と追加されたのはn番目で決め打ち '.Nameで系列名がセットできるみたい ActiveChart.FullSeriesCollection(n).Name = data系列名(n - 1) '値のセット.Values ActiveChart.FullSeriesCollection(n).Values = data実績(n - 1) '横軸 名前セット .XValues ActiveChart.FullSeriesCollection(n).XValues = dataX軸名 'データラベルで値の表示 いろいろあるので調整めんどう 'ActiveChart.FullSeriesCollection(1).Select '.Selectいらないよね。ぉぃぉぃ ActiveChart.FullSeriesCollection(n).ApplyDataLabels ActiveChart.FullSeriesCollection(n).DataLabels.Select Selection.ShowValue = True 'データラベル Next '凡例を表示 'msoElementLegendRight 101 凡例を右に表示します。 ActiveChart.SetElement (msoElementLegendRight) Range("A1").Select MsgBox "処理終了" End Sub '遊んでないで、知恵袋の質問に答えないと・・・ Sub TEST3() Sheets.Add 'シート追加、テストで繰り返すと重なるので落ち着くまで 'データベースから取得した 'tm, in, out '1, 3, 5 '2, 7, 9 '3, 5, 6 Dim DATAtm As Variant '変数名頭にD付けました Dim DATAin As Variant '※変数名inだと予約語でエラーだったので Dim DATAout As Variant 'Dに特に意味は無い DATAtm = Array(1, 2, 3) DATAin = Array(3, 7, 5) DATAout = Array(5, 9, 6) 'tm (時間の意) の横軸に対して 'in, outの折れ線グラフを書きたい 'のですが配列は3列一度に指定できるものなのか? '配列はaaaに入れています。 '↑あっ、勝手にDATAtmとか、分割しちゃった・・・ 'まず、折れ線グラフ xlLine 追加 ActiveSheet.Shapes.AddChart2(-1, xlLine, 50, 50).Select '系列inの処理 ActiveChart.SeriesCollection.NewSeries '.NewSeriesで新系列追加 'FullSeriesCollection(1)と追加されたのは1番目で決め打ちするのも・・まぁいっか '.Nameで系列名がセットできるみたい ActiveChart.FullSeriesCollection(1).Name = "in" '系列1の横軸セット .XValues ActiveChart.FullSeriesCollection(1).XValues = DATAtm '横軸はtm単位 'in値のセット.Values ActiveChart.FullSeriesCollection(1).Values = DATAin 'データラベルで値の表示 いろいろあるので調整めんどう ActiveChart.FullSeriesCollection(1).ApplyDataLabels ActiveChart.FullSeriesCollection(1).DataLabels.Select Selection.ShowValue = True 'データラベル '次の折れ線 out系列の追加 ActiveChart.SeriesCollection.NewSeries '.NewSeriesで新系列追加 'FullSeriesCollection(2)と追加されたのは2番目で決め打ちするのも・・まぁいっか '.Nameで系列名がセットできるみたい ActiveChart.FullSeriesCollection(2).Name = "out" '値のセット.Values ActiveChart.FullSeriesCollection(2).Values = DATAout 'outの値 'データラベルで値の表示 いろいろあるので調整めんどう ActiveChart.FullSeriesCollection(2).ApplyDataLabels ActiveChart.FullSeriesCollection(2).DataLabels.Select Selection.ShowValue = True 'データラベル 'せっかく.Nameで系列名セットしたので、凡例を表示 'msoElementLegendRight 101 凡例を右に表示します。 ActiveChart.SetElement (msoElementLegendRight) Range("A1").Select MsgBox "処理終了" End Sub
サンプルソースをアレンジして、
折れ線グラフを作ってみてください。
処理のヒントとなれば幸いです。
ActiveChart.SeriesCollection.Count で グラフ系列の数
ActiveChart.SeriesCollection.Count
よく見かける
.Count
でChartのSeries数がわかりそうです
Option Explicit Sub bbb() Dim n As Integer Debug.Print "コレクションの数:" & ActiveChart.SeriesCollection.Count For n = 1 To ActiveChart.SeriesCollection.Count Debug.Print ".Name=" & ActiveChart.SeriesCollection(n).Name Next End Sub
解決のヒントとなれば幸いです。
前回の動画:
www.youtube.com
Excel VBA グラフの範囲 値を直値にする セルの範囲を使わないで強引にマクロでセット
https://www.youtube.com/watch?v=UTLJ59dz4IQ
↑この動画の元です。時間のある時にこちらも見てください。