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に変えてくれます。
※ご意見もお待ちしております。
このブログへのコメントは muragonにログインするか、
SNSアカウントを使用してください。