Excel VBA質問箱 IV

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

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


3592 / 13644 ツリー ←次へ | 前へ→

【61245】グラフの範囲指定でX軸およびY軸の元データを指定したい。 Yuji 09/4/19(日) 14:46 質問[未読]
【61247】Re:グラフの範囲指定でX軸およびY軸の元デ... りん 09/4/19(日) 16:33 回答[未読]
【61248】Re:グラフの範囲指定でX軸およびY軸の元デ... Yuji 09/4/19(日) 18:13 お礼[未読]
【61251】Re:グラフの範囲指定でX軸およびY軸の元デ... つん 09/4/19(日) 19:34 発言[未読]
【61252】Re:グラフの範囲指定でX軸およびY軸の元デ... りん 09/4/20(月) 6:11 発言[未読]
【61263】Re:グラフの範囲指定でX軸およびY軸の元デ... Yuji 09/4/20(月) 21:10 発言[未読]
【61264】Re:グラフの範囲指定でX軸およびY軸の元デ... りん 09/4/20(月) 21:44 回答[未読]
【61265】Re:グラフの範囲指定でX軸およびY軸の元デ... Yuji 09/4/20(月) 23:43 お礼[未読]
【61266】Re:グラフの範囲指定でX軸およびY軸の元デ... Yuji 09/4/20(月) 23:49 発言[未読]

【61245】グラフの範囲指定でX軸およびY軸の元デー...
質問  Yuji  - 09/4/19(日) 14:46 -

引用なし
パスワード
   30分ほどGoogleや本質問箱を検索してみたのですが、解決策が見つかりませんでしたので、質問させてください。

  ActiveChart.ChartType = xlXYScatter
  ActiveChart.SetSourceData Source:=lWsP.Range("N11:N15,M11:M15"), PlotBy:= xlColumns

として、グラフを作成しようとしており、
N列のデータをx軸に、M列のデータをy軸にしたいのですが、できません。
(M列のデータがx軸になってしまいます)

どのように解決すればよいのかお教えいただけませんでしょうか?

【61247】Re:グラフの範囲指定でX軸およびY軸の元...
回答  りん E-MAIL  - 09/4/19(日) 16:33 -

引用なし
パスワード
   Yuji さん、こんにちわ。

>  ActiveChart.ChartType = xlXYScatter
>  ActiveChart.SetSourceData Source:=lWsP.Range("N11:N15,M11:M15"), PlotBy:= xlColumns
>
>として、グラフを作成しようとしており、
>N列のデータをx軸に、M列のデータをy軸にしたいのですが、できません。
>(M列のデータがx軸になってしまいます)

ものすごく昔のログですが。
htt p://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=8321;id=excel

これのデータ範囲の部分をちょっと変更して。

Sub Test()
  'NがX,MがY
  Dim co As ChartObject, r1 As Range, r2 As Range, Rmax As Long
  With ActiveSheet
   Set r1 = .Range("N11:N15") 'X
   Set r2 = .Range("M11:M15") 'Y
  End With
  With r1
   Rmax = .Cells(.Count).Row
  End With
  With ActiveSheet
  '一つあけて下
   With Range(.Cells(Rmax + 2, 1), .Cells(Rmax + 21, 10)) '大きさは適当
     Set co = ActiveSheet.ChartObjects.Add(.Left, .Top, .Width, .Height)
   End With
  End With
  With co.Chart
   .ChartArea.Font.Size = 10
   .ChartType = xlXYScatter
   .HasLegend = False
   .SetSourceData Source:=r2, PlotBy:=xlColumns
   .SeriesCollection(1).XValues = r1
  End With
  Set co = Nothing: Set r1 = Nothing: Set r2 = Nothing
End Sub

こんな感じです。

【61248】Re:グラフの範囲指定でX軸およびY軸の元...
お礼  Yuji  - 09/4/19(日) 18:13 -

引用なし
パスワード
   りんさん、お教え頂きありがとうございました。
りんさんにお教えいただいた後、
    .SetSourceData Source:=r2, PlotBy:=xlColumns
    .SeriesCollection(1).XValues = r1
に関して調べ、納得がいきました。
また、無事希望の動作をさせることができました。

ただ、勉強中、いじっているうちに、どうしても理解できないところが出てきてしまいました。

  name = ActiveSheet.name
  
  Set lWsP = ThisWorkbook.Worksheets(name)
  Set lWsE = ThisWorkbook.Worksheets("hogehoge")
  
  
  '////////////////グラフ作成/////////////////////////
  With ActiveSheet
   Set r1 = .Range("N11:N15") 'X
   Set r2 = .Range("M11:M15") 'Y
  End With
  With r1
   Rmax = .Cells(.Count).Row
  End With
  
  lWsE.Activate ←これだとエラーが起きる(lWsPならばエラーは起きない)

  With ActiveSheet
  '一つあけて下
   With Range(.Cells(Rmax + 2, 1), .Cells(Rmax + 21, 10)) '大きさは適当
     Set co = lWsE.ChartObjects.Add(.Left, .Top, .Width, .Height)
   End With
  End With


という問題が発生し、なぜこのような現象が起きるのか理解できません。
尚、hogehogeというシートは作ったままのまっさらなシートです。

希望の動作をさせることはできたものの、どうにも気持ちが悪いので、
もしよろしれば、なぜエラーが起きるのかお教えいただけましたら幸いです。

【61251】Re:グラフの範囲指定でX軸およびY軸の元...
発言  つん  - 09/4/19(日) 19:34 -

引用なし
パスワード
   Yuji さん、こんばんは^^
横から失礼します。
りんさんが来られる間につなぎってことでw

>  lWsE.Activate ←これだとエラーが起きる(lWsPならばエラーは起きない

こちらで、そのままコピペして実行しましたが、
エラーは再現しませんでした。

コードを見ても、特別エラーになりそうな感じではないですが・・・
(グラフ作成の部分はあまり真剣に読んでませんが、
 この場合、エラーには関係ないですもんね)

>  Set lWsE = ThisWorkbook.Worksheets("hogehoge")
あらかじめ、ちゃんと「hogehoge」シートは作成されてるんですよね?


>lWsE.Activate ←これだとエラーが起きる(lWsPならばエラーは起きない)
lWsPならばエラーは起きない・・・ってことなら、lWsEにちゃんと「hogehoge」シートが入ってないってことちゃうかな〜?

【61252】Re:グラフの範囲指定でX軸およびY軸の元...
発言  りん E-MAIL  - 09/4/20(月) 6:11 -

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

>>  Set lWsE = ThisWorkbook.Worksheets("hogehoge")
>あらかじめ、ちゃんと「hogehoge」シートは作成されてるんですよね?

>>lWsE.Activate ←これだとエラーが起きる(lWsPならばエラーは起きない)
>lWsPならばエラーは起きない・・・ってことなら、lWsEにちゃんと「hogehoge」シートが入ってないってことちゃうかな〜?


Setでエラーにならないということはシートがあるのでしょうし。
「hogehogeがまっさらなシート」ということはちゃんと準備されてるとでしょうから、あと疑うところはThisworkbook≠ActiveWorkbookか、シートが非表示になってるとかでしょうか。

あと、グラフを作成する際にActiveにする必要はないので、

グラフを別シートに描く
  With lWsE
   '一つあけて下
   With .Range(.Cells(Rmax + 2, 1), .Cells(Rmax + 21, 10)) '大きさは適当
     Set co = .ChartObjects.Add(.Left, .Top, .Width, .Height)
   End With
  End With

これで、どのシートにグラフができたかで確認してみるのもいいかも。

【61263】Re:グラフの範囲指定でX軸およびY軸の元...
発言  Yuji  - 09/4/20(月) 21:10 -

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

こんばんは。
このたびはお教え頂きありがとうございました。

お教えいただいたことをもとに色々試しているのですが、なかなかうまくいきません。


>グラフを別シートに描く
>  With lWsE
>   '一つあけて下
>   With .Range(.Cells(Rmax + 2, 1), .Cells(Rmax + 21, 10)) '大きさは適当
>     Set co = .ChartObjects.Add(.Left, .Top, .Width, .Height)
>   End With
>  End With
>
>これで、どのシートにグラフができたかで確認してみるのもいいかも。


私の書き方が悪かったですが、lWsEをActivateにするのは問題ありませんが、
lWsEをActivateにしてしまうと
With .Range(.Cells(Rmax + 2, 1), .Cells(Rmax + 21, 10)) ←この行
で問題が出てしまいます。

可能性によっては、他の部分でエラーが起きている可能性もありますので、
エラーを再現したファイルを作成し、
あつかましくもりんさんにお送りさせていただきました。

お忙しい中、お時間をおとり頂き申し訳ありませんが、
これが一番わかりやすい方法かと考えましたので、お時間ありますときにでも
エラーの原因をお教えいただけましたら幸いです。

【61264】Re:グラフの範囲指定でX軸およびY軸の元...
回答  りん E-MAIL  - 09/4/20(月) 21:44 -

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

>私の書き方が悪かったですが、lWsEをActivateにするのは問題ありませんが、
>lWsEをActivateにしてしまうと
>With .Range(.Cells(Rmax + 2, 1), .Cells(Rmax + 21, 10)) ←この行
   ↑

実は、最初の回答(=過去からの転記)ではRangeの前の「.」(Withに関連していますというサイン)が抜けていました(#61257で気づいて訂正)。

標準モジュールに記述する場合、親(ワークシートオブジェクト)を省略した場合は親がActiveSheet(ヘルプに書いてあります)なので、例のようにActiveSheetを対象としている限りエラーにはなりませんでした。

今回CommandButtonでの実行ということでシートモジュールに記述してされていますが、その場合は親を省略するとコードを記述したシートが親になります。
なので、

>With Range(.Cells(Rmax + 2, 1), .Cells(Rmax + 21, 10))
は省略せずに書くと
 With Sheet1.Range(Sheet2.Cells(Rmax + 2, 1), Sheet2.Cells(Rmax + 21, 10))
つまり、外と中で別シートの範囲を見ているのでエラーになってしまいます。

Withの内側でメッセージを出して確認してみてください。

  With ActiveSheet
   '↓これを追加してみてください。MsgBoxで違いがわかると思います。
   MsgBox Cells(1).Address(external:=True), vbInformation, .Cells(1).Address(external:=True)
  '一つあけて下
   With .Range(.Cells(Rmax + 2, 1), .Cells(Rmax + 21, 10)) '大きさは適当
     Set co = lWsE.ChartObjects.Add(.Left, .Top, .Width, .Height)
   End With
  End With

ということで、混乱させてしまったようですみません。

【61265】Re:グラフの範囲指定でX軸およびY軸の元...
お礼  Yuji  - 09/4/20(月) 23:43 -

引用なし
パスワード
   りんさん、こんばんは。

丁寧な解説ありがとうございました。
おかげさまで、理解できました。

"."がなくても勝手にActiveSheetで補完するとは知りませんでした。
勉強になりました。


繰り返しになりますが、ありがとうございました。

【61266】Re:グラフの範囲指定でX軸およびY軸の元...
発言  Yuji  - 09/4/20(月) 23:49 -

引用なし
パスワード
   訂正のための自己レスです


>"."がなくても勝手にActiveSheetで補完するとは知りませんでした。
>勉強になりました。
>

"."がなくても勝手に”コードが記述されているシート”で補完するとは知りませんでした。

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