• ベストアンサー

Excelでのグラフ作成用マクロについて。

「新しいマクロを記録する」でグラフ作成用のマクロを作りました。 内容は、 1.sheet1のBC列を散布図でsheet2に出力。(4つほど別々のグラフを作成) 2.プロットエリアの拡大 3.図の位置調整・図の大きさ調整。(4つが重ならないように) というものです。 一応出来たのですが、何故か選択列を変更して(マクロ内の列選択を変更)出力・プロットエリア拡大までは出来るのですが、3が出来ません。 それで、分からないなりにマクロ内を覗いてみたところ、図の位置を調整する際に、対象となる図が ActiveSheet.Shapes("グラフ 17").IncrementLeft -177.75 などと言うように、グラフ17を参照してしまっているためにうまく動かないのだと思いました。 (そもそも、名前なんて付けていないはず・・・と思って調べていたら、どうやら「グラフウインドウ」で見ることが出来る名前を参照しているようでした。) いっそのこと、グラフをクリック・ドラッグで移動させるのではなく、出力する際に整然と並ぶように設定したいです。どうすればよいでしょう? 一応、作成したものを載せておきます。 ・1~2 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "mass" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "counts" End With ActiveChart.HasLegend = False ActiveChart.PlotArea.Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Selection.Top = 1 Selection.Width = 323 Selection.Height = 180 Selection.Left = 15 Selection.Width = 334 Selection.Height = 194 ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = 0 .MaximumScale = 50 .MinorUnitIsAuto = True .MajorUnit = 5 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With End Sub 3. ActiveSheet.Shapes("グラフ 17").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 17").IncrementTop -105.75 End Sub

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

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

こんばんは。 こんな感じでどうでしょうか? 隙間の数と、最初の左上トップの位置を決定してください。 以下の隙間の15ですと、セルの高さぐらいですね。Double型で、細かい調整してもよいです。 Sub AligningCharts()   Dim cht As Object   Dim Tp As Double   Dim Lf As Double   Dim Wdth As Double   Dim Hght As Double   Dim i As Integer   Dim TopCell As Range      'ユーザー設定   Const CLRNCE As Integer = 15 '隙間   Set TopCell = ActiveSheet.Range("B6") '左端上トップに位置      Tp = TopCell.Top   Lf = TopCell.Left   For Each cht In ActiveSheet.ChartObjects     With cht       'この場合は、横に2列       .Top = Tp + (Hght * Int(i / 2))       .Left = Lf + (Wdth * (i Mod 2))       Wdth = .Width + CLRNCE       Hght = .Height + CLRNCE     End With     i = i + 1   Next cht   Set TopCell = Nothing End Sub なお、グラフのマクロは、バージョンによって一番影響の受けるものですから、バージョンの提示がない限りは、必ずしもうまくいくとは限りません。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

グラフがシート上に4つあるなら ActiveSheet.ChartObjects(1).Top = 100 ActiveSheet.ChartObjects(1).Left = 100 ActiveSheet.ChartObjects(2).Top = 100 ActiveSheet.ChartObjects(2).Left = 300 ActiveSheet.ChartObjects(3).Top = 250 ActiveSheet.ChartObjects(3).Left = 100 ActiveSheet.ChartObjects(4).Top = 250 ActiveSheet.ChartObjects(4).Left = 300 のように指定してはダメでしょうか?

関連するQ&A

専門家に質問してみよう