• ベストアンサー

For Each...Next を使いブック内のシートを順次処理したいのですが。

エクセルのマクロ初心者なのですが、先に進まなくなってしまいました。よろしくお願いします。 ブック内にシート100枚位あります。(このシートはブック毎に変動します。) 各シート上にあるデーターで、それぞれ、そのシート上に図を作成したいのですが、どうしても、それぞれのシート上にどうやって図を出したらいいのかわかりません。 For Each 各シート In Worksheets With 各シート .Activate Dim data As Range Set data = Range("B3:C2500") Charts.Add ActiveChart.ChartType = xlXYScatterLines ActiveChart.SetSourceData Source:=data ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1" ActiveChart.PlotArea.Select With Selection.Border .ColorIndex = 16 .Weight = xlThin .LineStyle = xlContinuous End With Selection.Interior.ColorIndex = xlNone End With Next あまり、内容も分かっていないのですが、このようなマクロを作ったのですが、図を”Sheet1”に出すことしかできませんでした。 どうにかして、それぞれのシート毎に図を出していきたいのですが、 アドバイスをいただけたらと思います。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 本来、埋め込みチャートは、以下のような書き方はしないのですが、グラフの中でも、散布図だけは特殊なコードのようです。掲示板の回答で何度か失敗した経験があります。自分の環境と他人の環境では思うように行かないのです。これは、Excelのバージョンによってコードが変わるからです。ともかく、試してください。 ただ、シートが100枚ほどで、このようなグラフ範囲を抱えて、ブックが持ちこたえられるのは、かなり疑問が残るところです。仮に、出来たとしても、繰り返さないほうがよいような気がします。 なお、ループ上の中で、  Dim data As Range と宣言しなおすのは、VBAではやめたほうがよいです。 Sub MakingChart() Dim ws As Variant Const MYRNG As String = "B3:C2500" 'データ範囲 For Each ws In ActiveWorkbook.Worksheets Charts.Add   With ActiveChart   .ChartType = xlXYScatterLines   .SetSourceData Source:=ws.Range(MYRNG), _    PlotBy:=xlColumns   .Location Where:=xlLocationAsObject, Name:=ws.Name   End With   With ActiveChart.PlotArea '仕切りなおし     With .Border     .ColorIndex = 16     .Weight = xlThin     .LineStyle = xlContinuous     End With     .Interior.ColorIndex = xlNone   End With  Next ws End Sub

pupuku--
質問者

お礼

 ありがとうございます。今日、実行してみたのですが、動きがだんだん遅くなってきて不安だったのですが、なんとか図を描くことができました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

質問には、影響ないと思われる部分は省いて、質問に掲出してください。それにデータ例も簡素にするとか。そういう思考訓練が、プログラム作成やデバッグにも役立つと思います。 4シートで、各シートA1:C3にデータを入れてテストしました。 下記以外は今回の質問に関係ないのではと思うが。 下記を参考にしてください。 各シートに散布図グラフが描かれました。 Sub test01() Dim sh As Object For Each sh In Worksheets With sh .Activate Charts.Add ActiveChart.ChartType = xlXYScatterLines ActiveChart.SetSourceData Source:=sh.Range("A1:B3") ActiveChart.Location Where:=xlLocationAsObject, Name:=sh.Name End With Next End Sub 質問ではシート名をSheet1に固定しているから ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1" が原因ですね。ここを相対化する方法を質問すればよかったのです。

pupuku--
質問者

お礼

ありがとうございます。どのように、質問をしたらいいのかわからず、言いたいことが伝わらなかったらと全部載せてしまいました。各項目ごとに考えられるように努力していきたいと思います。  

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

変数「各シート」は Wroksheet ですから、その名前をセットします。 具体的には下記を変えます。 ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1"                ↓ ActiveChart.Location Where:=xlLocationAsObject, Name:=各シート.Name

pupuku--
質問者

お礼

ありがとうございました。 うまく図を書くことができました。

pupuku--
質問者

補足

 質問なのですが、このマクロを同じようなデータのある別のブックで試してみたのですが、図は書けるのですが、データ範囲をうまく認識できず、図が書けないシートがあります。このような場合はどうしたらいいのでしょうか?よろしくお願いします。

関連するQ&A

専門家に質問してみよう