• ベストアンサー

Excelマクロ・グラフエリア・プロットエリアのサイズを変更及び綺麗に並べる

何方か、宜しくお願いします。 質問1 ワークシート上の複数のグラフを選択した状態でマクロを実効して 全てのグラフエリア・プロットエリアを同じサイズに変更するマクロを 教えて下さい。 (下記のコードでは、一つのグラフのプロットエリアのみ変更になります。) Sub グラフサイズ() ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.PlotArea.Select 'プロットエリア With Selection .Top = 17 .Left = 27 .Width = 463 .Height = 330 End With Range("A3").Select End Sub (参考:http://oshiete.nikkeibp.co.jp/qa780484.html) 質問2 質問1で修正したグラフを3列、行数は任意でワークシート上に綺麗に並べたい のですが、どのようなコードでしょうか。?(グラフとグラフの間は5ポイント位 隙間を入れたいと思います。グラフ数は20~40位、Excel2000)

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

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

こんばんは。Wendy02です。 >プロットエリアサイズは固定出来ないのでしょうか?、私が探した所無いようでしたが?Excelの仕様かな? ある程度は可能ですが、On Error トラップが必要ですね。つまり、そのまま実行してしまうと、物理的?な数値に合わないと、実行時エラーが発生してしまうのです。だいたい、プロットエリアの大きさは、グラフエリアの90%ぐらいだったかな? だから、理論的に、一旦、プロットエリアの大きさを取って、グラフエリアを変更してしまえば可能だと思うのです。その後で、並びの位置整理すればよいわけですね。でも、そうすると、今度は、グラフ全体の大きさがマチマチになる可能性があるわけです。 それで、最初の私のコードのように、グラフエリアは、余計なものだとして、私は、消してしまったのです。結構、見栄えが良いなって、自負したのですが……。^^;

hibohibo
質問者

お礼

回答ありがとう御座いました。 今回もいろいろ勉強になりました。

その他の回答 (5)

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

こんばんは。Wendy02です。 分かっていらっしゃると思いますが、こちらのマクロを使えば、プロットエリア側のマクロは、有効な値を入れない限りは、その値は無効になります。 Sub ChrtAreaSizing() Dim chrt As ChartObject  For Each chrt In ActiveSheet.ChartObjects '埋め込みグラフ   With chrt 'グラフエリア    .Width = 330  'ユーザーの任意の値    .Height = 200   End With   Next chrt End Sub

hibohibo
質問者

お礼

Wendy02様、他の回答者の皆様ありがとう御座いました。 プロットエリアサイズが自動で変わることで少し戸惑いましたが グラフエリアサイズを先に変更した後プロットエリアサイズを変更 して何とか上手くいきました、今回はありがとう御座いました。 (プロットエリアサイズは固定出来ないのでしょうか?、私が探した所 無いようでしたが?Excelの仕様かな?)

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

こんにちは。Wendy02です。 そうでしたか! すみません。ちょっとレイアウトにこだわってしまったもので。 >例えば、10個のグラフが有ったとして全てのグラフエリアが同じで >プロットエリアはグラフエリアよりも小さいサイズで10個同じという意味です。 それは訂正したものを新たに出しますが、でも、#3のTestGraphArrangement は、悪くない感じです。印刷プレビューでみると分かります。ただし、一回消えたものは、Ctrl + Z では戻りませんので、バックアップが必要です。 以下は、プロットエリアだけのサイジングをします。 Sub GraphSizing() 'グラフサイズ Dim chrt As ChartObject  For Each chrt In ActiveSheet.ChartObjects '埋め込みグラフ   With chrt.Chart.PlotArea 'プロットエリア    .Width = 463  'ユーザーの任意の値    .Height = 330 ' ''   End With   Next chrt End Sub

hibohibo
質問者

補足

Wendy02様宜しければ教えて下さい。 下記のマクロだとプロットエリアサイズのみ変更ですが グラフエリアのサイズも変更したいのですが。。。。 宜しければコードを教え下さい。 Sub GraphSizing() Dim chrt As ChartObject  For Each chrt In ActiveSheet.ChartObjects '埋め込みグラフ   With chrt.Chart.PlotArea 'プロットエリア    .Width = 463  'ユーザーの任意の値    .Height = 330 ' ''   End With   Next chrt End Sub

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

#2の追伸です。 今、試してみたけれども、以下のように、凡例だけ消してあげるだけでも、よさそうな気がします。 解説をつけておきましたので、必要に応じて、ブロックアウト(「'(アポストロフィ)をつける」)してください。なお、プロットサイズとグラフエリアは、同じにならない、ということを前提としています。 Sub TestGraphArrangement() 'グラフエリアとプロットエリアの差を近づける Dim grph As ChartObject  On Error Resume Next  For Each grph In ActiveSheet.ChartObjects   With grph.Chart    '.Axes(xlValue).Delete '数値軸    '.Axes(xlCategory).Delete '項目軸    .Legend.Delete  '凡例    .ChartArea.Border.LineStyle = 0 'グラフエリアの外周線を消す    .ChartArea.Interior.ColorIndex = xlNone 'グラフエリアを透明にする   End With  Next End Sub #2の訂正です。 >その横並びの一番大きな高さのものを対象にして を忠実に表してはいませんでした。横並びの一番高い高さを確保しても、3列終わったら、一度、0にしてあげないといけませんでした。 Dim StartPos As Range  Set StartPos = Range("D2") '最初のグラフのトップの位置  sngTop = StartPos.Top  sngLeft = StartPos.Left  For Each grph In ActiveSheet.ChartObjects  i = i + 1   With grph   .Top = sngTop     .Top = sngTop     .Left = sngLeft + sngWidth + 5 '横は、5ポイント     sngWidth = sngWidth + .Chart.ChartArea.Width     If .Chart.ChartArea.Height > sngHeight Then       sngHeight = .Chart.ChartArea.Height     End If    If i Mod 3 = 0 Then     sngTop = sngTop + sngHeight + 5 '縦の間は、5ポイント     sngHeight = 0 '加入     sngWidth = 0    End If   End With  Next End Sub

hibohibo
質問者

お礼

Wendy02様何時も回答ありがとう御座います。 プロットサイズとグラフエリアの件ですが書き方が悪かったです。 例えば、10個のグラフが有ったとして全てのグラフエリアが同じで プロットエリアはグラフエリアよりも小さいサイズで10個同じという意味です。 家のPCにはExcelが入っていない為火曜日に試したいと思います。 (もし修正が有った場合Wendy02様又宜しくお願いします。)

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

こんばんは。 なかなか、むつかしい質問だと思いました。 質問1 >グラフエリア・プロットエリアを同じサイズに変更する これは、できるのでしょうか? グラフエリア・プロットエリアを同じサイズに変更しようとすると、こちらでは、エラーが発生します。 擬似的に作り上げるだけです。もちろん、判例や数値軸、項目軸などは削除しなければならなくなりました。 そして、コードは、このようにしました。 Sub TestGraphArrangement() 'グラフエリアとプロットエリアの差を近づける Dim grph As ChartObject  On Error Resume Next  For Each grph In ActiveSheet.ChartObjects   With grph.Chart    .Axes(xlValue).Delete    .Axes(xlCategory).Delete    .Legend.Delete    .ChartArea.Border.LineStyle = 0    .ChartArea.Interior.ColorIndex = xlNone   End With  Next End Sub 質問2 グラフを3列というのは、3列づつという意味でしょうね。 まだ、あまり良く見直しておりません。なぜか、間が空きすぎる現象があります。その場合は、繰り返してください。本来は、グラフエリアの .Width, .Height の大きさを統一したほうがよいです。以下は、統一しない場合を想定しています。その場合、その横並びの一番大きな高さのものを対象にして、下の位置が決まります。 Sub TestGraphPosArrange() 'グラフの位置の調整 Dim grph As ChartObject Dim i As Integer Dim sngTop As Single Dim sngLeft As Single Dim sngHeight As Single Dim sngWidth As Single Dim StartPos As Range  Set StartPos = Range("D2") '最初のグラフの左端上の位置  sngTop = StartPos.Top  sngLeft = StartPos.Left  For Each grph In ActiveSheet.ChartObjects  i = i + 1   With grph   .Top = sngTop     .Top = sngTop     .Left = sngLeft + sngWidth + 5 '横は、5ポイント     sngWidth = sngWidth + .Chart.ChartArea.Width     If .Chart.ChartArea.Height > sngHeight Then       sngHeight = .Chart.ChartArea.Height     End If    If i Mod 3 = 0 Then     sngTop = sngTop + sngHeight + 5 '縦の間は、5ポイント     sngWidth = 0    End If   End With  Next End Sub

  • Kazamin
  • ベストアンサー率30% (17/56)
回答No.1

質問1に関して コレクションとFor Each ~ Nextループで実現可能です。 Sub Macro1() Dim objCollection As Object Dim obj1 As Object Set objCollection = Selection For Each obj1 In objCollection With obj1 .Width = 400 .Height = 300 End With Next obj1 End Sub 「Set objCollection = Selection」で選択されているものをオブジェクト変数にセットします。 この時、objCollection変数はオブジェクトのコレクションとしてふるまいますので、 For Each ~ Next ループでコレクションの要素を一つずつプロパティセットしてあげればいいわけです。 質問2に関しては、このループの中でTopとLeftプロパティをどう設定してやるかです。あえてサンプルコードは書きません。ご自分で試してみてください。

hibohibo
質問者

お礼

回答ありがとう御座いました。 火曜日に試したいと思います。

関連するQ&A

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

    Excelで、グラフ作成をするマクロを作りました。 sheet1のBC列選択→sheet2に出力→プロットエリア拡大まではうまくいったのですが、肝心の「図の位置調整・サイズ調整」が出来ませんでした。 中身を見たところ、「グラフ12」とかいう名前が勝手についていたらしく、何回やってもその名前を変更することが出来ませんでした。 参照する列を変更してグラフを作成しようとすると、次のグラフが「グラフ13」となってしまい、図の位置調整のところでエラーになります。 マクロは次のようなものなのですが、どうすれば「グラフ12」ではなく、「先ほど作ったばかりのグラフ」を参照してくれるのでしょうか? グラフ12という部分に任意の名前さえつけられれば、何とかなりそうなのですが・・・ グラフ12というものは、「グラフウインドウ」で見られるもののようです。 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With ActiveSheet.Shapes("グラフ 12").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 12").IncrementTop -105.75 ActiveSheet.Shapes("グラフ 12").ScaleWidth 1.48, msoFalse, msoScaleFromTopLeft ActiveSheet.Shapes("グラフ 12").ScaleHeight 1.21, msoFalse, msoScaleFromTopLeft ActiveChart.Axes(xlCategory).Select ActiveChart.Axes(xlValue).MajorGridlines.Select ActiveChart.PlotArea.Select Selection.Top = 1 Selection.Width = 526 Selection.Height = 242 End Sub

  • 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

  • エクセルでグラフの大きさを固定させるには

    たびたびすみません。Excel2000(office2000 SP-3)のグラフについての質問です。 グラフの大きさをそろえようとして、下記のマクロを実行し(過去のアドバイスを参考にさせていただきました)、全てそろえました。(1シート内にグラフが25個) しかし、画面表示のズーム%(25%←→75%)を変え、もとにもどすと、どうやら、そのときにグラフプロットエリアの大きさが変わっているようなのです。 他にも原因があるかもしれません。 なんとか、グラフの大きさを固定させたいのですが、どうしたらよいのでしょうか。 少しでもヒントがありましたら、アドバイスお願い致します。 Sub グラフ揃える2() ActiveChart.PlotArea.Select Selection.Width = 255 Selection.Left = 25 Selection.Height = 244 Selection.Top = 25 ActiveChart.HasLegend = True ActiveChart.Legend.Select Selection.Position = xlRight End Sub

  • エクセルのグラフをマクロで縮小化したい

    office2007。Vistaを使用。 エクセルのグラフを縮小するマクロを記録ボタンで作成しました。画面上は縮小されるのですが、「マクロの記録」ではそれが記録されません。office2003で作成したときは zoom を使用したような気がしますが、2007ではどうしたらよいのでしょうか?お教えください。A1B5 にデータが入っています。 Sub Macro1() ' Macro1 Macro Range("B2").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.SetSourceData Source:=Range("'Sheet1'!$A$1:$B$5") ActiveChart.ChartType = xlColumnClustered ActiveChart.Location Where:=xlLocationAsNewSheet ActiveSheet.ChartObjects("グラフ 1").Activate ActiveSheet.ChartObjects("グラフ 1").Activate Sheets("Sheet1").Select Range("A1").Select End Sub

  • グラフのサイズを揃えたいのでVBAを使っていたのですが、数値軸の最大値

    グラフのサイズを揃えたいのでVBAを使っていたのですが、数値軸の最大値などが異なる際は、 プロットエリアでは、幅が揃えられません。というのも、色々試した結果・・・ プロットエリアサイズは、数値軸の文字左側からグラフの右端までの長さを規定しているようなのです。 そこをグラフの箱部分のサイズを揃えることを可能にできないでしょうか? '// データを取得 With ActiveChart chtH = .Parent.Height chtW = .Parent.Width chtPH = .PlotArea.Height chtPW = .PlotArea.Width End With 現在上記のマクロで調整したグラフからサイズを取得し、他のグラフのデータを書き換えるという マクロを組んでいます。参考までにグラフを載せておきます。 この2つのグラフは、このマクロを使って揃えましたが、最大値が異なるため横幅が揃いません。 最大値を揃えると横幅が綺麗に揃います。しかしそのようにするとグラフが見難くなるためできません。 どなたかアドバイスをお願いします。 手動で揃えるには、大変な量なので・・・

  • エクセルのグラフ

    グラフが貼り付けられているシートを見えない状態でグラフ描画したいのですがうまくいきません ちなみに、今のコードはこうです。 Sub 電力力率表示() ActiveSheet.ChartObjects("グラフ 3").Activate ActiveChart.SeriesCollection(2).Select ActiveChart.SetSourceData Source:=Sheets(s_NAME) _ .Range("A2:C146"), PlotBy:=xlColumns End Sub

  • Excel マクロでグラフの凡例の位置を変更したい

    はじめまして。 Excelマクロ初心者です。 現在、Excelのグラフの凡例の位置を変更するマクロが作れなくて困っております。 =前提条件=     ・マクロを記録するbook(1)とグラフを含むbook(2)は別のファイル     ・book(1)よりマクロを実行し、book(2)を開き、グラフの凡例の位置を変えたい =book(2)の構成=     ・複数のシートが存在(Hiddenも存在)     ・各シートにグラフが複数存在 =現時点で作成したマクロ= Sub graph()   Workbooks.open "C:\********\book(2).xls"   Workbooks("book(2).xls").Active   Dim i AS Integer, wsCnt AS Integer i = 0 wsCnt = Worksheets.Count   For i = 0 To wsCnt Worksheets(i).Active If ActiveSheet.Visible = -1 - xlSheetVisibe Then For Each ChartObject In ActiveSheet.ChartObjects      With ActiveChart ActiveChart.ChartArea.Select ActiveChart.HasLegend = True ActiveChart.Legend.Select Selection.Position = xlBottom End With Next ChartObject End If Next i End Sub 現在、各シートがActiveになることまでは確認できています。 各グラフを掴めているかは確認できておりません。 以上となります。 ご多忙とは思いますが、ご教授いただけると幸いです。 宜しくお願い致します。

  • エクセルマクロのグラフ操作

    エクセルにてグラフの線の色を変えるマクロを記録し そのまま実行するとエラーになります。 (Lineメソッドは失敗しました) どこを変更すれば上手くいきますでしょうか。 '------------------------記録したマクロ ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.Legend.Select ActiveChart.Legend.LegendEntries(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(192, 0, 0) .Transparency = 0 End With 環境 Windows 7 Office 2010

  • エクセルでマクロを利用してグラフを作りたい

    エクセルでマクロを利用してグラフを作りたいです。 Sheet1で作ったマクロを、Sheet2でも動かす方法を教えてください。 マクロはド素人なのでいつも自動記録で作成しています。 シートはSheet1はSeet23まであり、各シートのデータのある場所は全て同じです。 今回は、Sheet1でマクロを自動記録させて作りました。 Sub Macro1() Range("G1:M6").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.SetSourceData Source:=Range("'Sheet1'!$G$1:$M$6") ActiveChart.ChartType = xlLine Range("G22").Select End Sub これをSheet2でも動かしたらSheet2にSheet1のデータを参照してグラフが出来てしまいました。 各シートで動かしたら、そのシート内のデータを読み取り、グラフを作る方法を教えてください。 大変困っています。よろしくお願いします。

  • EXCELのグラフのプロットエリアのサイズについて

    グラフを作成し、凡例を右に配置していて 凡例位置を下に変更すると、グラフのサイズ(プロットエリアのサイズ)も自動で変わりますよね? でもそれ以前にプロットエリアのサイズや位置を変更したりしていると 凡例位置を変更した場合、プロットエリアのサイズが自動で かわりません。 この状態になったとき、プロットエリアが自動で サイズ変更されるように戻す方法はありますか? あれば教えて下さい。

専門家に質問してみよう