続いて、「オートシェイプに面取りを設定する」について解説する。
Shapeに3D効果を与えるには、ThreeDオブジェクトを使用して、ThreeDFormatオブジェクトを取得し、各種プロパティの設定を行う。ThreeDFormatオブジェクトとは、図形の3Dの書式設定を表すオブジェクトだ。
Shapes.ThreeD.BevelTopType={表3の値}
ThreeDオブジェクトのBevelTopTypeプロパティに、表1の「面取り」を表す定数を指定する。
定数 | 値 | 説明 |
---|---|---|
msoBevelNone | 1 | 面取りなし |
msoBevelRelaxedInset | 2 | 額縁風面取り |
msoBevelCircle | 3 | 円形面取り |
msoBevelSlope | 4 | スロープ面取り |
msoBevelCross | 5 | クロス面取り |
msoBevelAngle | 6 | 角度面取り |
msoBevelSoftRound | 7 | ソフトラウンド面取り |
msoBevelConvex | 8 | 浮き上がり面取り |
msoBevelCoolSlant | 9 | クールスラント面取り |
msoBevelDivot | 10 | 切り込み面取り |
msoBevelRiblet | 11 | スケール面取り |
msoBevelHardEdge | 12 | ハードエッジ面取り |
msoBevelArtDeco | 13 | アールデコ面取り |
参考:MsoBevelType Enumeration(Office)- MSDN |
表3の順番は、「参考」ページの値「1」〜「13」までを順番に並べている。こうしておいた方が、「コンボボックス」から選択した「面取りタイプ」のインデックス番号と一致するので都合がいいし、わざわざ「値を」セルに入力しておく必要もないためだ。
ここからは、ThreeD.BevelTopTypeプロパティを使うための準備について説明する。サンプルマクロを実行するに当たり、図5のようになっているとしよう。
ここでも、「オートシェイプに影を設定するShadow.Typeプロパティ」と同じ方法で「コンボボックス」を配置する。
次に表3の「名前」を、「O1:O13」に表示させる。配置した「コンボボックス」を選択して、マウスの右クリックで表示されるメニューから、[コントロールの書式設定]を選択する。表示される画面から、[入力範囲]に表3の名前を入力した「O1:O13」までを指定する。次に[リンクするセル]に、「N2」を指定しておく。ここには、「コンボボックス」から選択されたインデックス番号が表示される。
これまでと同様、Module1内にリスト3の「面取りを表示する」マクロを記述する。
Option Explicit Sub 面取りの設定() Dim 面取り As Integer 面取り = Range("N2").Value Call オートシェイプの削除 With Range("B2:G18") ActiveSheet.Shapes.AddShape msoShapeExplosion1, .Left, .Top, .Width, .Height End With With ActiveSheet.Shapes(2).ThreeD .BevelTopType = 面取り .BevelTopInset = 10 .BevelTopDepth = 10 End With End Sub
3〜4行目では、変数「面取り」に、セル「N2」に表示される、「コンボボックス」から選択されたインデックスの値を格納する。
5〜8行目もこれまでと同様だが、範囲は「B2:G18」となり、「爆発型」のオートシェイプを指定している。
10〜14行目では、アクティブシートに表示されている、インデックスが「2」のShapeオブジェクトのThreeDオブジェクトに各プロパティを設定している。アクティブシートに表示されている、インデックスが「1」のShapeオブジェクトは、「コンボボックス」が該当する。
11行目のBevelTopTypeには、変数「面取り」に格納されている値を指定する。
ThreeDFormatオブジェクトに対して、「上の挿入面取り」を上げるかどうかを示すBevelTopInset プロパティには「10」を指定する(12行目)。
TThreeDFormatオブジェクト上で面取りを使用する場合に、「上の奥行き」を設定するBevelTopDepthプロパティにも「10」を設定する(13行目)。
「コンボボックス」を選択して、マウスの右クリックで表示されるメニューから「マクロの登録」を選択し、リスト3のマクロを関連付け実行すると、図6のように、「コンボボックス」から選択された「面取り」が、「B2:G18」の範囲に表示された「爆発型」オートシェイプに反映された。
「コンボボックス」から「面取り」の種類を選択するたびに、オートシェイプに選択した「面取り」が適用されて表示される。
最後に、「オートシェイプに文字を挿入する」について解説する。
オートシェイプに文字列を表示させるには、TextFrame2オブジェクトを使用し、Textプロパティで文字列を指定する。
ActiveSheet.Shapes({インデックス番号}).TextFrame2.TextRange.Characters.Text="{文字列}"
{インデックス番号}にはアクティブシート上に表示されている、図形のインデックス番号を指定する。
TextFrame2オブジェクトは、Shape、ShapeRange、またはChartFormatオブジェクトのレイアウト枠を表すものだ。なお、ShapeRangeは文書の図形セットである図形の範囲を表すオブジェクトで、ChartFormatはグラフ要素のOffice Art書式へのアクセスを提供するオブジェクトだ。
ここからは、TextFrame2オブジェクトを使うための準備について説明する。サンプルマクロを実行するに当たり、図7のようになっているとしよう。
「表示する文字」を入力するセルと、「文字サイズ」を入力するセル、それに「角丸四角形」で作成した「実行」ボタンを配置している。
Module1内に、「オートシェイプに文字を挿入する」マクロを記述する(リスト4)。
Sub オートシェイプに文字を挿入() Call オートシェイプの削除 With Range("B2:G18") ActiveSheet.Shapes.AddShape msoShapeHeart, .Left, .Top, .Width, .Height End With If Range("I2").Value = "" Or IsNumeric(Range("I3").Value) = False Then MsgBox "値が不正です。" Exit Sub Else With ActiveSheet.Shapes(2).TextFrame2 .TextRange.Characters.Text = Range("I2").Value .TextRange.Font.Size = Range("I3").Value End With End If End Sub
2〜5行目については、リスト1・2と同様なので、省略する。
7行目では、文字を入力するセルに文字が未入力の場合、かつ、「文字サイズ」を入力するセルに数値以外が入力されたかどうか判定している。偽の場合は、警告メッセージを表示して処理を抜ける。
11〜14行目では、アクティブシートのShapeオブジェクトのインデックスが「2」であるオートシェイプのTextFrame2オブジェクトに、各プ ロパティを設定している。アクティブシートのShapeオブジェクトのインデックス「1」には、「コンボボックス」が該当することになる。
12行目で、TextRange.Characters.Textにセル「I2」の値を指定し、13行目では、文字のサイズにTextRange.Font.Sizプロパティにセル「I3」の値を指定している。
「オートシェイプに文字を挿入する」シート内の「実行」ボタンに、リスト4のマクロを関連付け実行すると、図8のように、ハート型のオートシェイプ内に、指定した文字が指定したサイズで表示される。
今回は「オートシェイプに影を設定する」「オートシェイプをぼかす」「オートシェイプに面取りを設定する」「オートシェイプに文字を挿入する」の4つのTipsを紹介したが、いかがだっただろうか。
今回のTipsも、Tips「Excelでオートシェイプを表示、削除、画像を挿入する」同様、Excel上でオートシェイプを活用したが、PowerPointやWordでも使えるはずなので、ぜひ各自カスタマイズして利用してほしい。
また、VBA(Visual Basic for Applications)を使うと、その名の通り、ビジュアルを使ったプログラミングが手軽にできる。オートシェイプを使ったプログミラングは、まさにビジュアルに訴えるもので、楽しみながらプログミラミングを学ぶことができるので、初心者の学習用教材としても利用できるのではないだろうか。
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Copyright © ITmedia, Inc. All Rights Reserved.