電子書籍の厳選無料作品が豊富!

今折れ線グラフを作成しています。
データの範囲設定で悩んでいます。

項目軸ラベルのセル範囲と、グラフデータのセル範囲を指定を以下のように設定し折れ線グラフを作成しました。

Set RngData = Union(Wb3Sh6.Range(Cells(範囲1, 1), Cells(範囲2 - 1, 1)), _
            Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), _
             Wb3Sh6.Range(Cells(範囲1, 18), Cells(範囲2 - 1, 18)), _
             Wb3Sh6.Range(Cells(範囲1, 33), Cells(範囲2 - 1, 33)), _
            Wb3Sh6.Range(Cells(範囲1, 34), Cells(範囲2 - 1, 34)), _
            Wb3Sh6.Range(Cells(範囲1, 39), Cells(範囲2 - 1, 39)), _
            Wb3Sh6.Range(Cells(範囲1, 40), Cells(範囲2 - 1, 40)))

ActiveChart.SetSourceData Source:=RngData, PlotBy:=xlColumns


ですが。
項目軸を「Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), 」
のみとしたいのに

項目軸が「Wb3Sh6.Range(Cells(範囲1, 1), Cells(範囲2 - 1, 1)), _
            Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), _
             Wb3Sh6.Range(Cells(範囲1, 18), Cells(範囲2 - 1, 18)), _
             Wb3Sh6.Range(Cells(範囲1, 33), Cells(範囲2 - 1, 33)), _
            Wb3Sh6.Range(Cells(範囲1, 34), Cells(範囲2 - 1, 34)), _
            Wb3Sh6.Range(Cells(範囲1, 39), Cells(範囲2 - 1, 39)), _」

となってしまいます。

項目軸を確実に設定したいのですが、どうすればよいでしょうか。

A 回答 (2件)

>項目軸を確実に設定したいのですが、どうすればよいでしょうか。



どんなデータで、どの部分を確実になのかわかりませんが・・・・。
1行・1列は項目名として、データは変数で行範囲を指定し、
12~40列の指定列を対象とする場合、以下のコードで設定出来ます。

また、グラフを選択していない状態でも動作するように、
名前で対象のグラフを選択してから値を変更するようにしています。

コード内でグラフの名前は「グラフ 1」としています。
(異なる場合はコード内の該当位置を修正してください)


>項目軸を「Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), 」
>のみとしたいのに

コード内のArray(1, 12, ・・・)で対象の列番号をカンマ区切りで指定してください。
 For Each myCol In Array(1, 12)
で1列目(項目列)と12列目(データ列)を対象範囲として設定します。


■VBAコード

Sub sample()
Dim RngData As Object, Wb3Sh6 As Worksheet
Dim 範囲1 As Long, 範囲2 As Long
Dim myCol As Variant

'定数を設定
Set Wb3Sh6 = ActiveSheet
範囲1 = 1: 範囲2 = 11

'項目範囲を設定
With Wb3Sh6
For Each myCol In Array(1, 12, 18, 33, 34, 39, 40)
  If RngData Is Nothing Then
    Set RngData = .Range(.Cells(範囲1, myCol), .Cells(範囲2 - 1, myCol))
  Else
    Set RngData = Union(RngData, .Range(.Cells(範囲1, myCol), .Cells(範囲2 - 1, myCol)))
  End If
Next myCol
End With

'項目を反映
ActiveSheet.Shapes("グラフ 1").Select
ActiveChart.SetSourceData Source:=RngData, PlotBy:=xlColumns
End Sub
「vba グラフ データ範囲設定」の回答画像1
    • good
    • 0
この回答へのお礼

eden3616様
ご回答、ありがとうございます。
(お礼が遅くなって申し訳ありません)

記載いただいたコードを埋め込んで稼働しましたが、症状は変わりませんでした。

※グラフは全部で10個作成(データはすべて違う)するのですが、9個目だけバグが出てしまう
 バグ・・・項目軸が複数選択される

グラフを作成するデータが悪いのだと思います。
データを精査し、なぜ一つだけバグが出るのか調べてみます。

ありがとうございました。

お礼日時:2014/10/19 12:43

>※グラフは全部で10個作成(データはすべて違う)するのですが、9個目だけバグが出てしまう


> バグ・・・項目軸が複数選択される

(1)ベースとなるデータに差異が無いかの確認と、差異による処理内容への影響
(2)Debug.Print RngData.AddressなどをFor内に入れて、ブレークポイントをいれてから実行
(3)ステップ実行で各変数値が正常であるか確認

異常を試してみてください。
    • good
    • 0
この回答へのお礼

再度の回答、ありがとうございます。

(1)ベースとなるデータに差異が無いかの確認と、差異による処理内容への影響
 ⇒ 見たところ差異に気づくことができませんでした。
   そのため、元データを最初から作りなおしました。
   バグがでる9個目のデータのブランク行をカットするとうまくいくことが分かりました。
   ただ、ブランク行が根源かどうかは不明です。

(2)Debug.Print RngData.AddressなどをFor内に入れて、ブレークポイントをいれてから実行
 ⇒ イミディエイトウインドウにて確認しました。
   きれいに表示されました♪

(3)ステップ実行で各変数値が正常であるか確認
 ⇒ 表示を確認しましたが、正常値が取れていました。


よくよく10個のグラフを確認すると、2つのグラフに他のバクが出ていました。
系列名と系列値に対するバグです。
系列名はセル1個、系列値はその他セル100個としたいのに、
2つのグラフだけ系列名をセル4個持ってきてしまいます。
これも原因が不明です。

対策として、一度作成したグラフを修正するよう、以下のコードを埋め込みました。
コードがぐちゃぐちゃになりましたが、グラフとしてはきれいに仕上がりました。

原因が分からずモヤモヤしますが、一先ずこれで進めようと思います。
データを開示することができず、明確な説明ができずに申し訳ありません。

2度のご回答、ありがとうございました。


ActiveChart.FullSeriesCollection(1).XValues = Wb3Sh6.Range(Cells(範囲1 + 1, 1), Cells(範囲2 - 1, 1))

ActiveChart.FullSeriesCollection(1).Name = Wb3Sh6.Cells(範囲1, 12)
ActiveChart.FullSeriesCollection(1).Values = Wb3Sh6.Range(Cells(範囲1 + 1, 12), Cells(範囲2 - 1, 12))
ActiveChart.FullSeriesCollection(2).Name = Wb3Sh6.Cells(範囲1, 18)
ActiveChart.FullSeriesCollection(2).Values = Wb3Sh6.Range(Cells(範囲1 + 1, 18), Cells(範囲2 - 1, 18))
ActiveChart.FullSeriesCollection(3).Name = Wb3Sh6.Cells(範囲1, 33)
ActiveChart.FullSeriesCollection(3).Values = Wb3Sh6.Range(Cells(範囲1 + 1, 33), Cells(範囲2 - 1, 33))
ActiveChart.FullSeriesCollection(4).Name = Wb3Sh6.Cells(範囲1, 34)
ActiveChart.FullSeriesCollection(4).Values = Wb3Sh6.Range(Cells(範囲1 + 1, 34), Cells(範囲2 - 1, 34))
ActiveChart.FullSeriesCollection(5).Name = Wb3Sh6.Cells(範囲1, 39)
ActiveChart.FullSeriesCollection(5).Values = Wb3Sh6.Range(Cells(範囲1 + 1, 39), Cells(範囲2 - 1, 39))
ActiveChart.FullSeriesCollection(6).Name = Wb3Sh6.Cells(範囲1, 40)
ActiveChart.FullSeriesCollection(6).Values = Wb3Sh6.Range(Cells(範囲1 + 1, 40), Cells(範囲2 - 1, 40))

お礼日時:2014/10/21 01:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!