Qiitaでの投稿、記念すべき第一回目です。
正直プログラム経験はまだまだ乏しいですが、何かしらお役に立てれば幸いです。
今回は、PowerPoint 2010のマクロ機能を用いた、グラフ自動修正のコードを紹介します。
#背景
PowerPointに入力されたテキストの情報をグラフに自動で反映させるべく、マクロを作ったことのない私はGoogleを頼りにその方法を調べてました。しかし、ExcelのVBAに関するページは多くても、PowerPointのVBAのページは少なく、難航しました。さらに、PowerPoint上の入力情報からグラフのエクセルを操作することを記載していたものが見当たらず、様々なページからソースコードを参考にしなければならず、初心者の私にとってハードルは高かったです。そこで、作成したコードをシェアしようと思いました。
#仕様
- テキストボックスに数値を入れてエンターを押すとグラフに動的に反映される。
- 数値以外を入力する、あるいは0~100以外の数値を入力すると、エラーメッセージが表示される。
- テキストボックスには3桁まで入力可能。
なお、作製したPowerPointの外観は以下の通りです(スライドは少々寂しい)。
#前提条件
私の作成した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
#最後に
マクロを作る際、ちょっとした参考になれば幸いです。
ここまで読んでいただき、ありがとうございました!