業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、影を付けるShadow、ぼかしを付けるSoftEdge、面取りを設定するThreeD.BevelTopType、文字を挿入するTextFrame2オブジェクトの使い方などを解説。
Tips「Excelでオートシェイプを表示、削除、画像を挿入する」では、VBA/マクロでのオートシェイプの基本的な使い方を紹介したが、今回はさらに詳しくオートシェイプの使い方のTipsを紹介する。
紹介するTipsは以下の4つだ。
今回のTipsも、どれも直接実務には役に立たないTipsのように思われるかもしれないが、今回はプレゼンテーション用の資料を作成する場合に利用できるのではないかと思うので、ぜひ活用してほしい。
初めは、「オートシェイプに影を設定する」について解説しよう。ShapesオブジェクトのShadow.Typeプロパティを活用する。
Shapes.Shadow.Type={表1の値}
ShadowオブジェクトのTypeプロパティに表1の値を指定する。
名前 | 値 |
---|---|
msoShadow1 | 1 |
msoShadow2 | 2 |
msoShadow3 | 3 |
msoShadow4 | 4 |
msoShadow5 | 5 |
msoShadow6 | 6 |
msoShadow7 | 7 |
msoShadow8 | 8 |
msoShadow9 | 9 |
msoShadow10 | 10 |
msoShadow11 | 11 |
msoShadow12 | 12 |
msoShadow13 | 13 |
msoShadow14 | 14 |
msoShadow15 | 15 |
msoShadow16 | 16 |
msoShadow17 | 17 |
msoShadow18 | 18 |
msoShadow19 | 19 |
msoShadow20 | 20 |
msoShadow21 | 21 |
msoShadow22 | 22 |
msoShadow23 | 23 |
msoShadow24 | 24 |
msoShadow25 | 25 |
msoShadow26 | 26 |
msoShadow27 | 27 |
msoShadow28 | 28 |
msoShadow29 | 29 |
msoShadow30 | 30 |
msoShadow31 | 31 |
msoShadow32 | 32 |
msoShadow33 | 33 |
msoShadow34 | 34 |
msoShadow35 | 35 |
msoShadow36 | 36 |
msoShadow37 | 37 |
msoShadow38 | 38 |
msoShadow39 | 39 |
msoShadow40 | 40 |
msoShadow41 | 41 |
msoShadow42 | 42 |
msoShadow43 | 43 |
参考:MsoShadowType enumeration(Microsoft.Office.Core)- MSDN |
「参考」を見ると分かるが、各影の種類の「概要」には、「1番目の影のタイプ」〜「43番目の影のタイプ」としか記述されてなく、記載しても意味がないので、ここでは省略した。どのような表現になるのか、各自下記マクロを実行して試して確認してほしい。また「値」は上から順番に「1」〜「43」となるようだ。
ここからは、Shadow.Typeプロパティを使うための準備について説明する。サンプルマクロを実行するに当たり、図1のようになっているとしよう。
まず、Excelメニューの[開発]→[挿入]と選択して「コンボボックス」を配置する。次に表1の「名前」をコピーして「O1:O43」に表示させる。表1の「名前」の最初の値(ここでは「msoShadow1」)にカーソルを合わせて、[Ctl]キーを押しながら下方向にマウスをドラッグすると一気に選択できるので、それをコピー&ペーストすれば簡単だ。
配置した「コンボボックス」を選択して、マウスの右クリックで表示されるメニューから、[コントロールの書式設定]を選択する。表示される画面から、[入力範囲]に、表1の「名前」を入力した「O1:O43」までを指定する。
次に[リンクするセル]に、「N2」を指定しておく。ここには、「コンボボックス」から選択されたインデックス番号が表示される。各「影」の「値」は、上から順番に「1」〜「43」になっているので、特に「値」を入力しておく必要はない。セル「N2」に表示されるインデックス番号がそれに該当することになる。
ここからは、実際にマクロを記述してみよう。まず、VBE(Visual Basic Editor)のメニューから、[挿入]→[標準モジュール]と選択する。プロジェクトにModule1が追加されるので、Module1をダブルクリックして、表示されるエディター画面内にリスト1のマクロを記述する。
Option Explicit Sub オートシェイプの影を表示() Call オートシェイプの削除 With Range("B2:G18") ActiveSheet.Shapes.AddShape msoShapeHeart, .Left, .Top, .Width, .Height ActiveSheet.Shapes(2).Shadow.Type = Range("N2").Value End With End Sub
3行目では、オートシェイプを削除する「オートシェイプの削除」プロシージャを呼び込む(Tips「Excelでオートシェイプを表示、削除、画像を挿入する」で紹介)。
4〜5行目で「B2:G18」の範囲に、「ハート型」のオートシェイプを指定し、「B2:G18」のLeft、Top、Width、Heightの位置に表示する。
6行目では、アクティブシートに表示されている、インデックスが「2」のShapeオブジェクトのShadow.Typeプロパティに、セル「N2」の値を指定する。アクティブシートに表示されているインデックスが「1」のShapeオブジェクトは、「コンボボックス」が該当する。
「コンボボックス」を選択して、マウスの右クリックで表示されるメニューから、「マクロの登録」を選択し、リスト1のマクロを関連付け実行すると、図2のように「コンボボックス」から選択された「オートシェイプ」が、セル「B2:G18」の範囲に表示され、影はその範囲からは、はみ出して表示される。
「コンボボックス」から「オートシェイプの影」を選択するたびに、該当する「影」が表示されるので、いろいろ試してみてほしい。
次に、「オートシェイプをぼかす」について解説しよう。「オートシェイプをぼかす」という新しいシートを作成して試してほしい。ここでは、ShapesオブジェクトのSoftEdge.Typeプロパティを活用する。
Shapes.SoftEdge.Type={表2の値}
SoftEdgeオブジェクトのTypeプロパティには、表2の「ぼかし」の種類を指定する。
定数 | 値 | 説明 |
---|---|---|
SoftEdgeTypeMixed | -2 | ミックスされたぼかし |
msoSoftEdgeTypeNone | 0 | ぼかしなし |
msoSoftEdgeType1 | 1 | ぼかし1 |
msoSoftEdgeType2 | 2 | ぼかし2 |
msoSoftEdgeType3 | 3 | ぼかし3 |
msoSoftEdgeType4 | 4 | ぼかし4 |
msoSoftEdgeType5 | 5 | ぼかし5 |
msoSoftEdgeType6 | 6 | ぼかし6 |
参考:MsoSoftEdgeType Enumeration(Office)- MSDN |
ここからは、SoftEdge.Typeプロパティを使うための準備について説明する。サンプルマクロを実行するに当たり、図3のようになっているとしよう。
追加した「オートシェイプをぼかす」シート内に、「オートシェイプに影を設定するShadow.Typeプロパティ」と同じ方法で「コンボボックス」を配置する。[コントロールの書式設定]から、[入力範囲]にセル「P1:P8」を指定し、[リンクするセル]に「O2」を指定しておく。「値」には、表2の「値」を元に、「Q1:Q8」に入力しておく。
先ほど追加したModule1内に、リスト3の「オートシェイプをぼかす」マクロを記述する。
Sub オートシェイプをぼかす() Dim ぼかし As Integer ぼかし = Cells(Range("O2").Value, 17) Call オートシェイプの削除 With Range("B2:G18") ActiveSheet.Shapes.AddShape msoShapeHeart, .Left, .Top, .Width, .Height ActiveSheet.Shapes(2).SoftEdge.Type = ぼかし End With End Sub
まず、2行目でInteger型の変数「ぼかし」を宣言する。次に3行目で、変数「ぼかし」に、「Cells(行番号,列番号)」の書式で記述する。「行番号」には、「ぼかし」の種類として「コンボボックス」から選択したインデックス番号の表示されているセル「O2」の値を指定。「列番号」には、「Q列」である「17」の列番号を指定して、取得された「値」を格納している。
「ハート型」のオートシェイプを表示する方法は、リスト1と同じなので省略する。
7行目で、アクティブシートのShapeオブジェクトのインデックスが「2」である、オートシェイプのSoftEdge.Typeプロパティに、変数「ぼかし」の値を指定する。アクティブシートのShapeオブジェクトのインデックス「1」には、「コンボボックス」が該当することになる。
「オートシェイプをぼかす」シート内の、「コンボボックス」にリスト3のマクロを関連付け実行すると、図4のようにハート型のオートシェイプが、選択された「ぼかし」タイプで表示される。
表2を見て分かる通り、「説明」を見ただけでは、どのような「ぼかし」になるのか全く予測がつかない。「参考URL」を見ても同じだ。しかし、今回紹介した方法を使用すれば、どのタイプがどんな「ぼかし」になるか、一目瞭然で理解しやすいと思う。
Copyright © ITmedia, Inc. All Rights Reserved.