Excel VBA質問箱 IV

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

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


5091 / 13646 ツリー ←次へ | 前へ→

【52669】SetSourceData Source:=Sheets("Sheet1").Range(自動指定方法) トモ 07/11/25(日) 14:53 質問[未読]
【52670】Re:SetSourceData Source:=Sheets("S... かみちゃん 07/11/25(日) 15:00 発言[未読]
【52680】Re:SetSourceData Source:=Sheets("S... トモ 07/11/26(月) 10:57 お礼[未読]

【52669】SetSourceData Source:=Sheets("Sh...
質問  トモ  - 07/11/25(日) 14:53 -

引用なし
パスワード
   VBA初心者です、以下、お教えいただけないでしょうか?

下のようなシートにデータが取り込まれており(カラム数も行数も可変)、
Aカラム=時間軸に応じた部品ごとの折れ線グラフを、マクロで自動生成したいと思っております。
質問主旨としては、SetSourceData Source:=Sheets("IOPS").Rangeで、
Rangeを、データのある範囲を自動指定するには、どうすればいいでしょうか?

  A   B   C   D   ...
1     部品1 部品2 部品3 ...
2 time1 x.x1 y.y1 z.z1 ...
3 time2 x.x2 y.y2 z.z2 ...
4 time3 x.x3 y.y3 z.z3 ...
. ...  ...  ...  ...  ...

マクロRECORDERから、

 Charts.Add
 ActiveChart.ChartType = xlLineMarkers
 ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A2:Q762"), PlotBy:= _
 xlColumns

のようにRangeを "A2:Q762"と指定すればできますが、カラム、行数は可変のため、

 Dim EndRow, EndCol
  EndRow = Sheets("IOPS").Range("$A65536").End(xlUp).Row
  EndCol = Sheets("IOPS").Range("$B2").End(xlToRight).Column

 Charts.Add
 ActiveChart.ChartType = xlLineMarkers
 ActiveChart.SetSourceData Source:=Sheets("IOPS").Range(Cells(2, 1), Cells(EndRow, EndCol)), PlotBy:= _
    xlColumns

などとすると、マクロ・エディターでの継続ボタン実行時、以下エラーになります。

 実行時エラー '1004':
 'Cells'メソッドは失敗しました: '_Global'オブジェクト

このエラーの後、EndRow や EndColにマウスを当てると、正しい数値は入っているようです。
ただし、Range(Cells(2, 1), Cells(EndRow, EndCol))の代わりに、
Range(Cells(2, 1), Cells(762, 17)) としても、上と同じエラーになります。
(つまりRange指定では Cellsは合わない使用法なのでしょうか.
Cellsに拘らず、単にデータのある最下行、一番右側をどうやって SetSourceDate Source:=以下に自動的に組み込めばいいでしょうか?)

以上、ご教示いただきたく、よろしくお願いいたします。

【52670】Re:SetSourceData Source:=Sheets("...
発言  かみちゃん  - 07/11/25(日) 15:00 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> ActiveChart.SetSourceData Source:=Sheets("IOPS").Range(Cells(2, 1), Cells(EndRow, EndCol)), PlotBy:= _
>    xlColumns

「IOPS」シートがアクティブでない場合は、エラーになります。
Sheets("IOPS").Range(Sheets("IOPS").Cells(2, 1), Sheets("IOPS").Cells(EndRow, EndCol)), PlotBy:= _
とするか、

With Sheets("IOPS")
  EndRow = .Range("$A65536").End(xlUp).Row
  EndCol = .Range("$B2").End(xlToRight).Column

 Charts.Add
  ActiveChart.ChartType = xlLineMarkers
  ActiveChart.SetSourceData Source:=.Range(.Cells(2, 1), .Cells(EndRow, EndCol)), PlotBy:= _
    xlColumns
End With

CellsやRangeの前の「.」に注意が必要です。

【52680】Re:SetSourceData Source:=Sheets("...
お礼  トモ  - 07/11/26(月) 10:57 -

引用なし
パスワード
   かみちゃん さん、
即刻のお答えをいただき、大変ありがとうございます。
ご教示いただいた2通りの対応、いずれでもバッチリ、うまく行きました。
#お礼が遅れて、申し訳ありませんでした。1通り目の対応で嬉しくて、
#2通り目の確認に手間とりました。

また、ここあたりExcel/VBA作法について良い教科書など、お教えいただければ幸いです。

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