パワーポイントVBA
パワポVBAについて
PowerPointのVBAというのはあまり活用されていませんが、使いこなすととても便利です。このページでは、3つのサンプルをGIFアニメーションで紹介します。
面倒な図の選択を便利に!
フローチャートなどで、コネクタだけスタイルを変えたいときに手でポチポチ選ぶのは面倒です。そんなときはマクロを使うと簡単です。
百聞は一見にしかず、まず下のデモをご覧ください。
コードを掲載しておくので、自由に使ってください。
Sub 選択除外_図形のみ選択() Call 選択除外(True) End Sub Sub 選択除外_コネクターのみ選択() Call 選択除外(False) End Sub Private Sub 選択除外(非コネクター As Boolean) 'シェイプが選択されていなければ、処理を中断する。 If Not ActiveWindow.Selection.Type = ppSelectionShapes Then Exit Sub '残すシェイプのリストを準備 Dim 残すリスト() As String ReDim 残すリスト(0) Dim 図 As Shape For Each 図 In ActiveWindow.Selection.ShapeRange If 図.Connector Xor 非コネクター Then '残すシェイプの末尾に図の名前を追記 残すリスト(UBound(残すリスト)) = 図.Name '次の追記用にリストを1つ拡張 ReDim Preserve 残すリスト(UBound(残すリスト) + 1) End If Next 'ループで一個作りすぎるので、最後にマイナス1する ReDim Preserve 残すリスト(UBound(残すリスト) - 1) Dim 現在のスライド As Slide Set 現在のスライド = ActiveWindow.Selection.SlideRange(1) '残すリストの図形を選択しなおす。 現在のスライド.Shapes.Range(残すリスト).Select End Sub
使い方が分からない方は、VBA入門ダウンロードのページで入門教材を配布していますので、まずExcel VBAから初めてみてください。インターネットには便利なサンプルが沢山掲載されていますので、入門教材を終えればそれらのサンプルも使いこなせるようになるはずです。
番号を簡単に増減する
図にテキストで番号を書いている場合、途中に番号を挿入したいときに、番号を全部手で修正するのは面倒です。こんなときも、マクロを使うと簡単にできます。
このマクロは便利ですが、出来ないことも沢山あります。
シェイプ内の先頭1文字しか認識できず、普通の数字は残念ながら9までしか対応していません。丸囲みの数字は20まで対応しています。
このマクロは文字コードが順番に並んでいるという特性を利用したものです。漢数字は順番に並んでいないので対応していません。
コードは以下をご覧ください。
Sub 番号プラス() Call 番号増減(1) End Sub Sub 番号マイナス() Call 番号増減(-1) End Sub Private Sub 番号増減(数値) 'シェイプが選択されていなければ、処理を中断する。 If Not ActiveWindow.Selection.Type = ppSelectionShapes Then Exit Sub Dim 図 As Shape For Each 図 In ActiveWindow.Selection.ShapeRange If 図.HasTextFrame Then If 図.TextFrame.HasText Then With 図.TextFrame.TextRange 'Asc関数にテキストを入れると1文字目の文字コードを返す。 'それに指定された数値を足してChrで文字に戻したあと、 '2文字目以降を結合。 .Text = Chr(Asc(.Text) + 数値) & Mid(.Text, 2) End With End If End If Next End Sub
角丸のサイズを調整する
角丸四角形の角丸サイズを手で調整するのは面倒ですし、目視なのでぴったり合わせることも難しいです。マクロを使えば簡単にできます。
コードは次のとおりです。
Sub 角丸サイズ調整() 'シェイプが選択されていなければ、処理を中断する。 If Not ActiveWindow.Selection.Type = ppSelectionShapes Then Exit Sub Dim 角のサイズ As Double, Temp As Variant Do Until Temp >= 1 And Temp <= 20 Temp = InputBox("1~20の数値を入力してください。") If Temp = "" Then Exit Sub ElseIf Not IsNumeric(Temp) Then Temp = 0 'ループ継続させるためのゼロ代入 End If Loop 角のサイズ = CDbl(Temp) Dim 図 As Shape Dim 短辺 As Double For Each 図 In ActiveWindow.Selection.ShapeRange If 図.AutoShapeType = msoShapeRoundedRectangle Then '角丸のサイズは、角丸四角形の短辺に対する割合(0~0.5)で表される。 'まず、どちらが短辺なのかを判定し、そのサイズを代入する。 短辺 = IIf(図.Width < 図.Height, 図.Width, 図.Height) '次に、ユーザーが入力したサイズを短辺で割ることで図形に割合を求め、 '角丸サイズを表す「図.Adjustments.Item(1)」に代入する。 図.Adjustments.Item(1) = 角のサイズ / 短辺 End If Next End Sub