- ベストアンサー
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
- みんなの回答 (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)
グラフがシート上に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 のように指定してはダメでしょうか?