dポイントプレゼントキャンペーン実施中!

エクセルで商品毎の販売量推移の散布図を複数作成し、それぞれのグラフを比較する等して販売活動の参考にしているのですが、対象となる商品の数が増えてきたので比較作業が大変になりました。一つのシートに比較邸小さな同じサイズのグラフを作成し、きちんと並べることができれば、作業が大変楽になると思っています。勿論、シートをスクロールしてグラフを見る前提です。
そこで、「新しいマクロの記録」でコードを作成してみたのですが、次の点がわからず困っています。ご指導の程よろしくお願い致します。

1.グラフを作成する際、最初からサイズを指定する方法
「新しいマクロの記録」では、一度作成したグラフのサイズを縮小する内容※になっていますが、これを最初からサイズ指定する方法があるのでしょうか?
※ ActiveSheet.Shapes("グラフ 103").ScaleWidth 0.48, msoFalse, msoScaleFromTopLeft

2.移動する際のグラフの名前?の指定方法
名前が分からないのでグラフを移動しようと思ってもグラフを指定することができないので困っています。上の例では名前が自動付与されて"グラフ 103"になっていますが、作成したグラフを消去してもグラフを作成するたびに数字が増えてしまうので、作成時に指定する方法を知りたいのです。サイズを指定する数値の単位は下記の移動に使用する単位と同じであれば助かります。

3.グラフの移動方法
「新しいマクロの記録」では下記のように相対的な数字がポイントで指定するようになっていました。
ActiveSheet.Shapes("グラフ 103").IncrementLeft 4.5
ActiveSheet.Shapes("グラフ 103").IncrementTop 43.5
これでは、複数のグラフを整列させることは難しいので、適当な移動方法はないでしょうか?

以上よろしくお願い致します。

A 回答 (2件)

>エラー



グラフを選んだままマクロを動かすと,よくそうなる症状です。


では。
Sub macro1R1()
Dim c As ChartObject
Dim n
n = 3

ActiveSheet.Range("A1").Select

For Each c In ActiveSheet.ChartObjects
c.Height = 200
c.Width = 300
c.Left = Cells(n, "D").Left
c.Top = Cells(n, "D").Top
n = n + 16
Next

End Sub
    • good
    • 1
この回答へのお礼

早速のレスポンスありがとうございました。
一つ目のグラフについてはうまくいきましたが、2つ目のグラフではエラーになりました。

そこで、アドバイスを参考に
ActiveSheet.Range("A1").Select
の位置を下記のように変更しました所、うまくいきました\(^o^)/

For Each c In ActiveSheet.ChartObjects
'----
ActiveSheet.Range("A1").Select
'---
c.Height = 200
c.Width = 300
c.Left = Cells(n, "D").Left
c.Top = Cells(n, "D").Top
n = n + 16
Next

おかげさまで、これから一仕事できそうです。
助かりました。 どうもありがとうございました。

お礼日時:2010/04/17 21:26

名前を使わず,「オブジェクト」を操作する練習をしましょう。



作成例:
Sub macro1()
 Dim c As ChartObject
 Dim n
 n = 3

 For Each c In ActiveSheet.ChartObjects
  c.Height = 200
  c.Width = 300
  c.Left = Cells(n, "D").Left
  c.Top = Cells(n, "D").Top
  n = n + 16
 Next

End Sub

この回答への補足

早々に回答をいただきましてどうもありがとうございました。

早速、トライしてみたのですが、途中でエラーが発生してしまいました。
デバッグのステップオーバーでチェックしてみた所、
  c.Height = 200
  c.Width = 300
では、問題なくサイズが変更されておりました。

次の
  c.Left = Cells(n, "D").Left
で下記のエラーが表示されました。
--------------
実行時エラー'1004'
'Cellsメソッッドは失敗しました:'_Global'オブジェクト
--------------

c.Left = c.Left
とするとエラーは発生せず、
Cells(n, "D").Left=Cells(n, "D").Left
とするとエラーが発生するので、
Cells(n, "D").Left
の使用方法がおかしいような気がするのですが、
残念ながらそれ以上は分かりませんでした。

補足日時:2010/04/17 20:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!