Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5719 / 13645 ツリー ←次へ | 前へ→

【49164】折れ線グラフのデータ範囲 mayu 07/5/25(金) 17:52 質問[未読]
【49173】Re:折れ線グラフのデータ範囲 りん 07/5/26(土) 3:02 発言[未読]
【49176】Re:折れ線グラフのデータ範囲 mayu 07/5/26(土) 9:48 質問[未読]
【49191】Re:折れ線グラフのデータ範囲 りん 07/5/27(日) 6:11 回答[未読]
【49270】Re:折れ線グラフのデータ範囲 mayu 07/5/30(水) 7:20 お礼[未読]
【49277】Re:折れ線グラフのデータ範囲 mayu 07/5/30(水) 14:03 お礼[未読]

【49164】折れ線グラフのデータ範囲
質問  mayu  - 07/5/25(金) 17:52 -

引用なし
パスワード
   以下のプログラムでは、指定した表の範囲の埋め込みグラフが一行分データの折れ線グラフが複数できてしまうのですが、二行分のデータを1つの折れ線グラフとして複数作成するにはどうすればいいのでしょうか。
また、二本の折れ線に色を指定することができますか。
改良の仕方がわかりません。
ご存知の方、よろしくお願いいたします。


  Dim Num As Integer, sRng As Range, sRow As Range
  Set sRng = Selection.Offset(ColumnOffset:=1). _
    Resize(ColumnSize:=Selection.Columns.Count - 1)
  For Num = 2 To Selection.Rows.Count
    Set sRow = sRng.Rows(Num)
    With Sheets("グラフ用").ChartObjects.Add(((Num - 2) Mod 2) _
      * 220 + 20, Int((Num - 2) / 2) * 160 + 20, 200, 140)
      With .Chart
        .SetSourceData Source:=Union(sRng.Rows(1), sRow), _
          PlotBy:=xlRows
        .ChartType = xlLine
      End With
    End With
  Next Num
End Sub

【49173】Re:折れ線グラフのデータ範囲
発言  りん E-MAIL  - 07/5/26(土) 3:02 -

引用なし
パスワード
   mayu さん、こんばんわ。

>以下のプログラムでは、指定した表の範囲の埋め込みグラフが一行分データの折れ線グラフが複数できてしまうのですが、二行分のデータを1つの折れ線グラフとして複数作成するにはどうすればいいのでしょうか。

>  Dim Num As Integer, sRng As Range, sRow As Range
>  Set sRng = Selection.Offset(ColumnOffset:=1). _
>    Resize(ColumnSize:=Selection.Columns.Count - 1)
>  For Num = 2 To Selection.Rows.Count
>    Set sRow = sRng.Rows(Num)
     ↑ここが作図される1行  

>    With Sheets("グラフ用").ChartObjects.Add(((Num - 2) Mod 2) _
>      * 220 + 20, Int((Num - 2) / 2) * 160 + 20, 200, 140)
>      With .Chart
>        .SetSourceData Source:=Union(sRng.Rows(1), sRow), _
                         ↑ここが見出し行?
>          PlotBy:=xlRows
>        .ChartType = xlLine
>      End With
>    End With
>  Next Num
>End Sub
元のデータはどんな表で、どんな風に選択した状態でこのマクロを実行するのですか?
グラフに表示したい2行というのはどの行のことですか?


なお、線の色を変更するのはこんな感じです

系列1の線を赤に
 .Chart.SeriesCollection(1).Border.ColorIndex = 3

【49176】Re:折れ線グラフのデータ範囲
質問  mayu  - 07/5/26(土) 9:48 -

引用なし
パスワード
   ▼りん さん

おはようございます。
りんさん、お返事ありがとうございます。
VBAについては基本もまだよく勉強できておらず、ご迷惑をおかけします。

>元のデータはどんな表で、どんな風に選択した状態でこのマクロを実行するのですか?

元のデータに関しましては↓こんな感じです。

  1月 2月 3月 4月 5月 6月
A上 30  40  50  60  70  80
A下 10  20  30  40  50  60
B上 45  55  65  75  85  95
B下 25  35  45  55  65  75 
::
上記内容と同様C〜続く

選択は入力したセルを全て選択します。

>グラフに表示したい2行というのはどの行のことですか?

今の状態でマクロを実行すると、「A上」の部分がグラフタイトルとなり1月から6月までの30〜80までの一本の折れ線グラフとなります。

グラフにはA上とA下の値が二本の折れ線として表示されるグラフにしたいです。
(続くB上B下〜同様)

>なお、線の色を変更するのはこんな感じです
>
>系列1の線を赤に
> .Chart.SeriesCollection(1).Border.ColorIndex = 3

申し訳ありません。質問がなっておりませんでした。
上記お教えいただいた方法は私も試してみたのですが、下記のエラーが表示されてしまいます。
“実行時エラー438
 オブジェクトは、このプロパティまたはメソッドをサポートしていません。”


ご指摘いただきました、質問の不備については以上です。
貴重なお時間を割いていただくことを思うと恐れ入りますが、アドバイスいただけますと幸いです。


Sub AddChartObjects()
  Dim Num As Integer, sRng As Range, sRow As Range
  Set sRng = Selection.Offset(ColumnOffset:=1). _
    Resize(ColumnSize:=Selection.Columns.Count - 1)
  For Num = 2 To Selection.Rows.Count
    Set sRow = sRng.Rows(Num)
    With Sheets("グラフ用").ChartObjects.Add(((Num - 2) Mod 2) _
      * 220 + 20, Int((Num - 2) / 2) * 160 + 20, 200, 140)
      With .Chart
        .SetSourceData Source:=Union(sRng.Rows(1), sRow), _
          PlotBy:=xlRows
        .ChartType = xlLine
        .ChartArea.Font.Size = 6
        .ChartArea.Interior.ColorIndex = 35
        .PlotArea.Interior.ColorIndex = 37
        .Axes(xlValue).MinimumScale = 0
        .Axes(xlValue).MaximumScale = 100
        .ApplyDataLabels AutoText:=True
        .HasTitle = True
        With .ChartTitle
          .Text = Selection.Rows(Num).Cells(1).Value
          .Font.Size = 8
        End With
      End With
    End With
  Next Num
End Sub

【49191】Re:折れ線グラフのデータ範囲
回答  りん E-MAIL  - 07/5/27(日) 6:11 -

引用なし
パスワード
   mayu さん、おはようございます。

>今の状態でマクロを実行すると、「A上」の部分がグラフタイトルとなり1月から6月までの30〜80までの一本の折れ線グラフとなります。
>グラフにはA上とA下の値が二本の折れ線として表示されるグラフにしたいです。
>(続くB上B下〜同様)

A1の右下のセルの連続範囲がデータテーブルだとして作図しています。
もし、データテーブルの左上のセルがA1でない場合は、該当のセルのアドレスに変更してください。

Sub AddChartObjects()
  Dim II As Integer, Imax As Integer
  Dim ch As Chart, ws As Worksheet, r1 As Range, r2 As Range, se As Series
  'データがアクティブシートにあるとする
  Set ws = Application.ActiveSheet
  'データの領域
  Set r1 = ws.Range("A1").Offset(1, 1).CurrentRegion
  '
  Imax = (r1.Rows.Count - 1) \ 2 'グラフの最大個数
  For II = 1 To Imax
   '見出し+データの行数
   With r1
     Set r2 = Application.Union(.Rows(1), .Rows(II * 2), .Rows(II * 2 + 1))
   End With
   '
   With WorkSheets("グラフ用")
     Set ch = .ChartObjects.Add(((II - 1) Mod 2) _
      * 220 + 20, Int((II - 1) / 2) * 160 + 20, 200, 140).Chart
      '
      With ch
        .SetSourceData Source:=r2
        .ChartType = xlLine
        .ChartArea.Font.Size = 6
        .ChartArea.Interior.ColorIndex = 35
        .PlotArea.Interior.ColorIndex = 37
        .Axes(xlValue).MinimumScale = 0
        .Axes(xlValue).MaximumScale = 100
        .ApplyDataLabels AutoText:=True
        .HasTitle = True
        With .ChartTitle
          .Text = r1.Rows((II * 2)).Cells(1).Value & "/" & r1.Rows((II * 2 + 1)).Cells(1).Value
          .Font.Size = 8
        End With
        '系列の色
        .SeriesCollection(1).Border.ColorIndex = 3 '系列1
        .SeriesCollection(2).Border.ColorIndex = 5 '系列2
      End With
    End With
  Next II
End Sub

こんな感じです。

【49270】Re:折れ線グラフのデータ範囲
お礼  mayu  - 07/5/30(水) 7:20 -

引用なし
パスワード
   ▼りん さん:

おはようございます。

ご教示、ありがとうございました。お教えいただいた方法で試してみようと思います。

お礼が遅くなり申し訳ありませんでした。

【49277】Re:折れ線グラフのデータ範囲
お礼  mayu  - 07/5/30(水) 14:03 -

引用なし
パスワード
   ▼りん さん:

こんにちは。
実際に試してみてうまくいきましたのでご報告とお礼を再度させて下さい。

本当にありがとうございました。助かりました。

こんなに短時間で量をこなせるなんてやっぱりすごいですね。
さらに興味を持つことができました。これからもっと勉強して、いつかりんさんみたいになれたらと思います。

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

5719 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free