2
2

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.

PowerPoint 2010のマクロでテキストボックスに入力した数値をグラフに反映する方法

Last updated at Posted at 2019-01-01

Qiitaでの投稿、記念すべき第一回目です。
正直プログラム経験はまだまだ乏しいですが、何かしらお役に立てれば幸いです。

今回は、PowerPoint 2010のマクロ機能を用いた、グラフ自動修正のコードを紹介します。

#背景
PowerPointに入力されたテキストの情報をグラフに自動で反映させるべく、マクロを作ったことのない私はGoogleを頼りにその方法を調べてました。しかし、ExcelのVBAに関するページは多くても、PowerPointのVBAのページは少なく、難航しました。さらに、PowerPoint上の入力情報からグラフのエクセルを操作することを記載していたものが見当たらず、様々なページからソースコードを参考にしなければならず、初心者の私にとってハードルは高かったです。そこで、作成したコードをシェアしようと思いました。

#仕様

  • テキストボックスに数値を入れてエンターを押すとグラフに動的に反映される。
  • 数値以外を入力する、あるいは0~100以外の数値を入力すると、エラーメッセージが表示される。
  • テキストボックスには3桁まで入力可能。

なお、作製したPowerPointの外観は以下の通りです(スライドは少々寂しい)。
図表示_自動化.PNG

#前提条件
私の作成したPowerPointのスライドは以下のようになっています。

  • 入力するテキストボックスは、PowerPointの「開発」タブ>「コントロール」 の中にあるテキストボックスを使用。
  • グラフは円グラフ。A、Bの二つの百分率を表示する(A + B = 100%)。
  • グラフのBの百分率を表示する部分には、エクセル上で「= 100 - (Aを表示するセル) 」を埋め込む。
  • テキストボックスの名前は"txtA"、円グラフの名前は"Chart 5"。
  • "txtA"のプロパティのMaxLengthを3に設定。

#ソースコード
作製したソースコードです。

Slide 1
'テキストボックスでエンターキーを押すと、内容を取得してグラフに自動反映する
Private Sub txtA_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        'KeyCodeの初期化
        KeyCode = 0
                
        'txtAの内容取得
        strTxtA = txtA.Text
        
        '数値型でなければエラー文を出力
        If Not (IsNumeric(strTxtA)) Then
            MsgBox "数値を入力してください。"
            Exit Sub
        End If
        
        'txtAの内容をInt型に変換
        intTxtA = CInt(strTxtA)
        
        '数値を0から100で入力していなければエラー文出力
        If intTxtA < 0 Or intTxtA > 100 Then
            MsgBox "数値は0から100の範囲で入力してください。"
            Exit Sub
        End If
        
        '円グラフの取得
        Set myDocument = ActivePresentation.Slides(1)
        Set pchart = myDocument.Shapes("Chart 5")
        
        '円グラフのデータの値を編集
        With pchart.Chart.ChartData
            .Activate
            .Workbook.Sheets(1).Range("B2").Value = intTxtA
            .Workbook.Close
        End With
        
    End If
End Sub

#最後に
マクロを作る際、ちょっとした参考になれば幸いです。
ここまで読んでいただき、ありがとうございました!

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?