5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WinActorとVBAでパワポ資料を自動作成する

Last updated at Posted at 2019-07-12

経緯

WinActorを使って社内でRPA化を推進しています。
ユーザ部門にRPA化したい業務をヒアリングすると、どこでも出てくる案件があります。

  • 定例会議で使用するパワポ資料をRPAで自動作成する

しかし、 WinActor単体でパワポ資料作成など不可能です。
なぜなら、用意されているパワポ関連のライブラリが1個しかないからです。
WS000015.JPG

できません、と言って断っても良かったのですが、
何らかの実績を残したかったので、VBAを駆使してやってみることにしました。

資料作成の流れ

資料作成の流れは、以下の図のようになります。

  1. 経理システムや部門独自アプリから営業データをCSV形式で出力します
  2. CSVを集計用のエクセルに張り付けます
  3. 集計用のエクセルの値をパワポフォーマットに張り付けます

WS000023.JPG

【RPA部分】経理システムから当月の売上データを取得する

うちの経理システムはウェブアプリでも操作できるので、RPAにも優しい。
基本はボタン押すだけだし、WinActorでも簡単にできるだろう・・・。

ライブラリに年度取得がない**(#^ω^)イラー**

WS000018.JPG
仕方ないので自分でライブラリを作る。
WS000020.JPG

ブラウザの応答が遅いとエラーで止まる**(#^ω^)ウゼー**

ウインドウ状態待機や指定時間待機を用いて、待ってあげましょう。
WS000021.JPG

【VBA部分】貼り付けた売上データを元にパワポ資料を作成する

今回のメインの部分です。
ExcelVBAの資料は山ほどあるのに、PowerPointVBAの情報はほとんどありません。
Microsoftの公式ドキュメントを読んでやっていきます。
https://docs.microsoft.com/ja-jp/office/vba/api/overview/powerpoint

タイトルの設定

PowerPointは、テキストボックスや図形、グラフなどは全てオブジェクトとして管理されている。
画面1.gif
VBAで操作する場合は、対象のオブジェクトを指定して、値を設定してやればいいです。
例えば、タイトルのテキストボックスは、以下のような指定で文字が設定できます。

Shapes("タイトル").TextFrame.TextRange.Text = "何か文字列を入れる"

1ページ目のタイトルは以下のようなVBAで設定しています。


Public ppPrs As PowerPoint.Presentation 'プレゼンテーションオブジェクト
Dim ppSld As PowerPoint.Slide 'スライドオブジェクト
'--------------------------------------------------------------------------------------------
    Set ppSld = ppPrs.Slides(1) '1ページ目のスライドをセット
    'タイトル設定
    ppSld.Shapes("タイトル").TextFrame.TextRange.Text = nendo & Format(Now(), "MM月") & "営業会議"
    '(3)は変更なし
    ppSld.Shapes("作成日").TextFrame.TextRange.Text = "作成日:" & Format(Now(), "YYYY年MM月DD日") & Chr(13) & Chr(10) & "作成者:XXX"
    ' Object Release
    Set ppSld = Nothing

'--------------------------------------------------------------------------------------------

表の設定

2ページ目は、表の設定を行っています。
テキストボックスの指定とは少し異なっています。
画面2.gif

Shapes("表").OLEFormat.Object.Sheets(1).Range("N4:N13").Value = "何らかの値"

'--------------------------------------------------------------------------------------------
    Set ppSld = ppPrs.Slides(2) '2ページ目のスライドをセット
    'ページタイトル設定
    ppSld.Shapes("ページタイトル").TextFrame.TextRange.Text = nendo & "/" & Gatsu & " 収益実績(事業部全体)"
    
    '収益実績(事業部全体)データ設定
    With ppSld.Shapes("表").OLEFormat.Object
        '前期実績データ設定
        .Sheets(1).Range("N4:N13").Value = ThisWorkbook.Worksheets("集計").Range("C5:C14").Value
        '当期計画データ設定
        .Sheets(1).Range("O4:O13").Value = ThisWorkbook.Worksheets("集計").Range("D5:D14").Value
        '当期実績データ設定
        .Sheets(1).Range("P4:P13").Value = ThisWorkbook.Worksheets("集計").Range("E5:E14").Value
    End With
    '売上高チャート作成
    With ppSld.Shapes("グラフ-売上高").Chart.ChartData
        .Activate
        '売上高データ設定
        ThisWorkbook.Worksheets("集計").Range("C5:E5").Copy
        .Workbook.Sheets(1).Range("B2:D2").PasteSpecial Paste:=xlPasteValues
        .Workbook.Close
    End With
    '営業利益チャート作成
    With ppSld.Shapes("グラフ-営業利益").Chart.ChartData
        .Activate
        '営業利益データ設定
        ThisWorkbook.Worksheets("集計").Range("C14:E14").Copy
        .Workbook.Sheets(1).Range("B2:D2").PasteSpecial Paste:=xlPasteValues
        .Workbook.Close
    End With
    
    '売上高計画達成率設定
    ppSld.Shapes("達成率-売上高").Table.Cell(1, 2).Shape.TextFrame.TextRange.Text = Format(ThisWorkbook.Worksheets("集計").Range("F5").Value, "0.0;▲0.0") & "%"
    '営業利益計画達成率設定
    ppSld.Shapes("達成率-営業利益").Table.Cell(1, 2).Shape.TextFrame.TextRange.Text = Format(ThisWorkbook.Worksheets("集計").Range("F14").Value, "0.0;▲0.0") & "%"
    '売上高差異設定
    ppSld.Shapes("計画実績差異-売上高").TextFrame.TextRange.Text = Format(ppSld.Shapes("表").OLEFormat.Object.Sheets(1).Range("J4").Value / 1000000, "0.0;▲0.0")
    '営業利益差異設定
    ppSld.Shapes("計画実績差異-営業利益").TextFrame.TextRange.Text = Format(ppSld.Shapes("表").OLEFormat.Object.Sheets(1).Range("J13").Value / 1000000, "0.0;▲0.0")
    
    ' Object Release
    Set ppSld = Nothing

'--------------------------------------------------------------------------------------------

グラフの設定

2ページ目の下で、グラフの設定を行っています。


'--------------------------------------------------------------------------------------------
    Set ppSld = ppPrs.Slides(2) '2ページ目のスライドをセット
    '売上高チャート作成
    With ppSld.Shapes("グラフ-売上高").Chart.ChartData
        .Activate
        '売上高データ設定
        ThisWorkbook.Worksheets("集計").Range("C5:E5").Copy
        .Workbook.Sheets(1).Range("B2:D2").PasteSpecial Paste:=xlPasteValues
        .Workbook.Close
    End With
    '営業利益チャート作成
    With ppSld.Shapes("グラフ-営業利益").Chart.ChartData
        .Activate
        '営業利益データ設定
        ThisWorkbook.Worksheets("集計").Range("C14:E14").Copy
        .Workbook.Sheets(1).Range("B2:D2").PasteSpecial Paste:=xlPasteValues
        .Workbook.Close
    End With
    ' Object Release
    Set ppSld = Nothing

'--------------------------------------------------------------------------------------------

マイナス表示を▲表示にする方法

値を取得してきただけでは、マイナス表示が"-"になってしまします。
報告資料では、マイナスを"▲"で表示することが多いと思いますので、その設定です。
Format関数を使って、セクションの指定でマイナスのときの指定をします。


Format(-9999, "0.0;▲0.0")

まとめ

こんな感じで表とグラフをVBAで作成できれば、
RPAでデータ取得して、そのデータを表とグラフに設定してやれば、
資料作成が自動化できると思います。

大変なのは、集計用のエクセルを作るのと、パワポのフォーマットを作ることです

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?