- ベストアンサー
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”に出すことしかできませんでした。 どうにかして、それぞれのシート毎に図を出していきたいのですが、 アドバイスをいただけたらと思います。よろしくお願いします。
- みんなの回答 (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
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
質問には、影響ないと思われる部分は省いて、質問に掲出してください。それにデータ例も簡素にするとか。そういう思考訓練が、プログラム作成やデバッグにも役立つと思います。 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" が原因ですね。ここを相対化する方法を質問すればよかったのです。
お礼
ありがとうございます。どのように、質問をしたらいいのかわからず、言いたいことが伝わらなかったらと全部載せてしまいました。各項目ごとに考えられるように努力していきたいと思います。
- papayuka
- ベストアンサー率45% (1388/3066)
変数「各シート」は Wroksheet ですから、その名前をセットします。 具体的には下記を変えます。 ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1" ↓ ActiveChart.Location Where:=xlLocationAsObject, Name:=各シート.Name
お礼
ありがとうございました。 うまく図を書くことができました。
補足
質問なのですが、このマクロを同じようなデータのある別のブックで試してみたのですが、図は書けるのですが、データ範囲をうまく認識できず、図が書けないシートがあります。このような場合はどうしたらいいのでしょうか?よろしくお願いします。
お礼
ありがとうございます。今日、実行してみたのですが、動きがだんだん遅くなってきて不安だったのですが、なんとか図を描くことができました。