好きこそものの上手なれ

他人から見れば、下手の横好きですが、そっと見守ってください。

Excelでアクティブなグラフ名の取得とサイズ変更

よくエクセルで、ChartObjects(グラフ名)でグラフのサイズを変えるサンプルはよく見かけます。


ActiveSheet.ChartObjects("グラフ 1").Width = .Width
ActiveSheet.ChartObjects("グラフ 1").Height = .Height


しかし、肝心のグラフ名を得る方法が書かれているサイトはあまり見かけません。
以下のようにすると、アクティブなグラフ名が得られます。


With ActiveChart
 chart_name = Split(.Name, " ")(1) & " " & Split(.Name, " ")(2) 'ここが味噌
 'Debug.Print "chart_name=" & chart_name
End With


ActiveChart.Nameは、シート名+スペース+グラフ+スペース+番号の形となりますので、
Split関数を使ってスペースを区切り文字として、配列にして分割します。
配列はゼロオリジンなので1は2番目を表します。2は3番目です。


例えば、Sheet1シートのグラフ1は、「Sheet1 グラフ 1」となっているので、これをSplit関数で処理すると、
0 : 1番目  Sheet1
1:  2番目  グラフ
2:  3番目  1
となり、グラフ名は 2番目+スペース+3番目で作れます。(グラフ名:グラフ 1)
なぜ、このような面倒な方法になる理由は、シート名が付加されているので、そのままグラフ名として使えないためです。(※ここはあまり自身がないのですが、自流で回避できた方法ですので間違えでしたら、ぜひコメントください。


グラフ名が分かれば、高さ(height)と幅(width)をポイントで設定すればグラフのサイズを変更できます。単位はcmが分かりやすいので、Application.CentimetersToPoints(センチ)とします。


以下、そのコードです。


Option Explicit


Sub グラフサイズを変える()
 Dim chart_name As String 'グラフの名前
 
 With ActiveChart
  chart_name = Split(.Name, " ")(1) & " " & Split(.Name, " ")(2) 'ここが味噌
  'Debug.Print "chart_name=" & chart_name

  ActiveSheet.Shapes(chart_name).Height = Application.CentimetersToPoints(7.62) '高さ 7.62cm
  ActiveSheet.Shapes(chart_name).Width = Application.CentimetersToPoints(12.7) '幅 12.7cm
  
  End With  
End Sub


マクロをctrl+qなどに割り当てて、グラフをクリックして ctrl+qとすると、グラフのサイズを高さ7.62cm、幅を12.7cmに変えてくれます。





※ご意見もお待ちしております。