PowerPoint VBA 折れ線グラフを散布図に変更して、軸の書式設定を行う
きっかけ
先日PowerPointのスライド200枚の中にある折れ線グラフ約250個に対して、以下の作業をする機会があった。
各折れ線グラフに対して
(1) グラフの種類を折れ線から散布図に変更
(2) 横軸の最大値、最小値を設定
更に、一つのスライドに存在する折れ線グラフの数によって処理が異なり、
(1) グラフが1つの場合
・目盛り幅を4に設定
(2) グラフが2つ以上の場合
・目盛り幅を8に設定
・補助目盛り幅を4に設定
・補助目盛りの種類を目盛りと同じものに設定
サンプルコード
Sub Main() Dim s As slide Dim lineCharts As Collection, chart As Variant For Each s In ActivePresentation.Slides Set lineCharts = 折れ線グラフを取得(s) For Each chart In lineCharts Call 折れ線グラフを散布図に変換(chart, lineCharts.Count) Next chart Next s End Sub Sub 折れ線グラフを散布図に変換(chart As Variant, chart_num As Long) Dim shp As Shape: Set shp = chart Dim xAxis As Axis: Set xAxis = shp.chart.Axes(1) shp.chart.ChartType = xlXYScatterLines xAxis.MinimumScale = 0 xAxis.MaximumScale = 96 If chart_num = 1 Then xAxis.MajorUnit = 4 Else xAxis.MajorUnit = 8 xAxis.MinorTickMark = xAxis.MajorTickMark xAxis.MinorUnit = 4 End If End Sub Function 折れ線グラフを取得(s As slide) As Collection Dim ret As Collection: Set ret = New Collection Dim shp As Shape For Each shp In s.Shapes If shp.HasChart Then If shp.chart.ChartType = xlLineMarkers Then ret.Add shp End If Next shp Set 折れ線グラフを取得 = ret End Function
Excel VBAやAccess VBAと勝手が異なり苦労した。
細かな処理は別プロシージャ化して、なるべくMainのプロシージャが簡潔になるようにした。
改善点は色々あると思うが、とりあえずやりたいことは出来たので、これでよしとしよう。