h-yonesanのblog

VBAやプログラムについて日々勉強したことを書いています。

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 VBAAccess VBAと勝手が異なり苦労した。
細かな処理は別プロシージャ化して、なるべくMainのプロシージャが簡潔になるようにした。
改善点は色々あると思うが、とりあえずやりたいことは出来たので、これでよしとしよう。