みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2007-11-28 14:20:38

QNo.3553854

すぐに回答ほしいです

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

こんばんは。

こんな感じでどうでしょうか?
隙間の数と、最初の左上トップの位置を決定してください。
以下の隙間の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


なお、グラフのマクロは、バージョンによって一番影響の受けるものですから、バージョンの提示がない限りは、必ずしもうまくいくとは限りません。

投稿日時 - 2007-11-29 01:23:45

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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
のように指定してはダメでしょうか?

投稿日時 - 2007-11-28 17:49:05

あなたにオススメの質問