連載
» 2014年10月07日 18時00分 UPDATE

VBA/マクロ便利Tips:Excelグラフで特定のデータの色、透明度、テクスチャ、パターンを変更したり、戻したりする

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、透明度を設定するTransparency、テクスチャを設定するPresetTextured、パターンを指定するPatterned、書式をクリアするClearToMatchStyleなどの使い方を紹介する。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


Excelグラフで特定のデータを目立たせてUXの向上を

 Tips「Excelグラフで特定のデータを目立たせるテクニック」では、特定のデータを指定してそれを目立たせる方法としてデータラベルを表示する方法を紹介したが、今回はその応用編だ。Excelグラフで特定のデータを目立たせるさまざまなテクニックを紹介する。

 今回紹介するTipsはグラフのUI(ユーザーインターフェース)に関するもので、グラフ表示において「こうしなければならない」というTipsではない。しかし、グラフに対してこのような処理を実装できるということを知っておくことは必要だと思い紹介する。最近ではUX(ユーザーエクスペリエンス)が話題になり、デザインの美しさや、操作性の良さを求められることも多くある。ExcelのVBAについても、UXの概念を取り入れることでより見栄えが良くなるのではないだろうか。

 また、グラフにパターンを適用した後に、適用したパターンをクリアしたい場合のために、「グラフの書式をクリアする」Tipsも併せて紹介する。

グラフを指定した色に変更する

 グラフの色は、何も指定しないとExcelが自動的に決定して表示される。グラフを指定した色に変更する処理を行うと、自分の気に入った色に指定できる。

グラフを指定した色に変更する書式

ActiveSheet.ChartObjects(1).Chart.SeriesCollection({インデックス番号}).Format.Fill.ForeColor.RGB=RGB({赤の割合},{緑の割合},{青の割合})


 Tips「特定のデータのグラフにデータラベルを表示する」同様、特定のデータを指定するのにChart.SeriesCollectionメソッドを使う。{インデックス番号}は、今回は「薬師寺」「夏目」「阪神」「正岡」の4名としているので、1〜4となる。

 変更するグラフの色を指定する方法はTips「凡例の背景を塗りつぶす色を指定する」同様、Format.Fill.ForeColor.RGBプロパティを使う。

 「グラフを指定した色に変更する」という新しいシートを作成して、Tips「特定のデータのグラフにデータラベルを表示する」の図6をそのまま全部コピーしておく。

 Module1内にリスト1のコードを記述する。

Sub グラフを指定した色に変更する()
  Dim 番号 As Integer
  Range("B3:F9").Select
  If ActiveSheet.ChartObjects.Count > 0 Then
    ActiveSheet.ChartObjects(1).Delete
  End If
   
On Error GoTo myError
  番号 = Range("O3").Value - 1
  With Range("H2")
    ActiveSheet.Shapes.AddChart Left:=.Left, Top:=.Top, Width:=Range("H2:M9").Width, Height:=Range("H2:M9").Height
  End With
  ActiveSheet.ChartObjects(1).Chart.SeriesCollection(番号).Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
myError:
  Exit Sub
End Sub
リスト1 グラフを指定した色に変更するコード

 まず2行目でInteger型変数「番号」を宣言し、3行目でグラフを作成するための元になるデータ「B3:F9」を選択する。4〜6行目では、セル上にすでにグラフが作成されている場合は、Deleteメソッドで削除して初期化している。

 コンボボックスの「氏名を選択」を選択するとエラーが発生するので、8行目以降はエラー処理を行っている。

 9行目で変数「番号」にコンボボックスから選択された値を表示するセル「O3」の値を格納する。実際のインデックス番号より「-1」しておく。「-1」しておく理由はTips「特定のデータのグラフにデータラベルを表示する」の解説を参照。

 10〜12行目では、セル「H2」を基準に、「H2:M9」の範囲にグラフを作成する。

 13行目では、変数「番号」に該当する人物のグラフの色を、赤に変化させる。RGB関数の色の割合については、「RGB関数(Visual Basic)- MSDN」を参照してほしい。色を変えたい場合は、RGB関数の値を変えることで対応できる。

 ここの処理では、まず選択された氏名のグラフが赤に変化する。次にコンボボックスから別の名前を選択した場合は、すでに表示されているグラフを削除して新しくグラフを作成し、選択された氏名に該当するグラフの色を変えている。この処理を行わないと、一つのグラフの中で該当する人物のグラフが赤になるため、最終的には全て赤のグラフになり、目的とは異なる結果を招くからだ。

 実行すると、図1のようにコンボボックスより選択された人物のグラフが赤に変化する。

ExcelVBATipsGraph6_07.png 図1 指定されたグラフが赤に変化した

グラフの透明度を設定するTransparencyプロパティ

 次にグラフの透明度を設定する方法について解説する。シートを新たに追加して、図2のような生徒別の各科目の点数のデータを作っておこう。このグラフはExcelメニューの[挿入]→[グラフ]と選択して作成したものだ。

ExcelVBATipsGraph7_01.png 図2 生徒別の各科目の点数のデータをグラフ化している

 ここに表示されているグラフの透明度を変化させてみよう。グラフの透明度を設定するTransparencyプロパティの書式は下記のようになる

グラフの透明度を設定するTransparencyプロパティの書式

With ActiveSheet.ChartObjects(1).Chart.SeriesCollection({インデックス番号}).Format.Fill

 .ForeColor.RGB=RGB({赤の割合},{緑の割合},{青の割合})

 .Transparency={透明度}

End With


 先ほど同様RGB関数で、色を決め、Transparencyプロパティに{透明度}を指定する。値は「0(不透明)」〜「1(透明)」を指定する。

 図2に{透明度}を入力するセルと、Excelメニューの[開発]→[挿入]と選択して「フォームコントロール」の中からコンボボックスを選択して配置しておこう。コンボボックスを選択してマウスの右クリックで表示される[コントロールの書式設定]を選択し、表示される画面の[コントロール]タブ内の[入力範囲]や[リンクするセル]を指定する方法もTips「特定のデータのグラフにデータラベルを表示する」と同じなので、そちらを参照してほしい(図3)。

ExcelVBATipsGraph7_02.png 図3 {透明度}を入力するセルと、氏名を選択するコンボボックスを配置した

 実際にマクロを記述してみよう。Module1にリスト2のコードを記述する。

Option Explicit
Sub グラフの透明度を設定する()
  Dim 番号 As Integer
  Range("B3:F9").Select
  If ActiveSheet.ChartObjects.Count > 0 Then
    ActiveSheet.ChartObjects(1).Delete
  End If
  
On Error GoTo myError
 
  If Range("P2").Value = "" Then
    MsgBox "透明度を入力してください。"
    Exit Sub
  End If
  
  If Range("P2").Value > 1 Then
    MsgBox "透明度の値は0〜1の間です。"
    Exit Sub
  End If
 
  番号 = Range("U2").Value - 1
 
  With Range("H2")
    ActiveSheet.Shapes.AddChart Left:=.Left, Top:=.Top, Width:=Range("H2:M13").Width, Height:=Range("H2:M13").Height
  End With
 
  With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(番号).Format.Fill
    .ForeColor.RGB = RGB(255, 0, 0)
    .Transparency = Range("P2").Value
  End With
myError:
  Exit Sub
End Sub
リスト2 指定した人物のグラフの透明度を変化させるコード

 コードについては大体先ほどと同じだ。29行目で赤に変化させたグラフの透明度を決める。Transparencyプロパティに、セル「P2」に入力した透明度を指定する。11〜19行目で{透明度}の入力値に対してチェックを行っている。

 コンボボックスを選択して、マウスの右クリックで表示されるメニューから「マクロの登録」を選択し、リスト2のマクロを関連付け実行すると、図4のようにコンボボックスで選択された人物のグラフが赤に変化し、指定した透明度が適用される。

ExcelVBATipsGraph7_03.png 図4 コンボボックスから選択した人物のグラフの色を赤にして、透明度を「0.8」に指定している

 他のグラフと比較してみると、透明度の設定されたグラフは、背景の「目盛り線」が透けて見えているので判断できる。グラフを赤に指定したのに「ピンク」に見えるのは、透明度が設定されているためである。

グラフにテクスチャを設定するPresetTexturedメソッド

 グラフにはテクスチャも指摘できる。PresetTexturedメソッドの書式は下記の通りだ。

グラフにテクスチャを設定する書式

ActiveSheet.ChartObjects(1).Chart.SeriesCollection({インデックス番号}).Format.Fill.PresetTextured 表1の値


 {インデックス番号}は、今回も「薬師寺」「夏目」「阪神」「正岡」の4名としているので、最初からインデックス番号は1〜4となる。PresetTexturedメソッドに指定するテクスチャは表1になる。

表1 組み込みテクスチャ
名前 説明
msoTextureBlueTissuePaper 青い画用紙のテクスチャ
msoTextureBouquet ブーケのテクスチャ
msoTextureBrownMarble 大理石(茶)のテクスチャ
msoTextureCanvas キャンバスのテクスチャ
msoTextureCork コルクのテクスチャ
msoTextureDenim デニムのテクスチャ
msoTextureFishFossil 化石のテクスチャ
msoTextureGranite みかげ石のテクスチャです
msoTextureGreenMarble 大理石(緑)のテクスチャ
msoTextureMediumWood 木目のテクスチャ
msoTextureNewsprint 新聞紙のテクスチャ
msoTextureOak オークのテクスチャ
msoTexturePaperBag 紙袋のテクスチャ
msoTexturePapyrus パピルスのテクスチャ
msoTextureParchment セーム皮のテクスチャ
msoTexturePinkTissuePaper ピンクの画用紙のテクスチャ
msoTexturePurpleMesh 紫のメッシュのテクスチャ
msoTextureRecycledPaper 再生紙のテクスチャ
msoTextureSand 砂のテクスチャ
msoTextureStationery ひな形のテクスチャ
msoTextureWalnut くるみのテクスチャ
msoTextureWaterDroplets しずくのテクスチャ
msoTextureWhiteMarble 大理石(白)のテクスチャ
msoTextureWovenMat 麻のテクスチャ
参考:MsoPresetTexture 列挙(Office)- MSDN

 「グラフにテクスチャを設定する」という新しいシートを作成して、図2のデータとグラフをそのままコピーしておく。「テクスチャの適用」というボタンを配置しておく。

 これまでのように、コンボボックスを配置して「氏名」を選択し、またテクスチャも、コンボボックスに表示させて選択させると、リアルタイムに、指定した人物のグラフのテクスチャを変化させることができるが、これまでの処理と解説が重複するので、今回は、コンボボックスは使用していない。これまでのTipsを参考にすると簡単に実現できるので、読者の皆さんが試してほしい。

 今回はボタンクリックで任意の人物のグラフにテクスチャを適用させてみた。

 Module1内に、リスト3の「グラフにテクスチャを設定する」コードを記述する。

Sub グラフにテクスチャを設定する()
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(3).Format.Fill.PresetTextured msoTextureMediumWood
End Sub
リスト3 「グラフにテクスチャを設定する」コード

 SeriesCollectionの引数に「3」を指定し、名前が「阪神」のグラフに、表1から「木目のテクスチャ」である「msoTextureMediumWood」を指定している。

 リスト3を「テクスチャの適用」ボタンに関連付け実行すると、図5のように氏名が「阪神」のグラフに、「木目のテクスチャ」が適用された。

ExcelVBATipsGraph7_04.png 図5 「阪神」のグラフに、「木目のテクスチャ」が適用された

グラフにパターンを指定するPatternedメソッド

 Excel VBAには、グラフに適用できる「MsoPatternType」というパターンが用意されている。これを使うとグラフにいろいろなパターンを適用できる。

 今回はできるだけグラフを大きくした方が見やすいため、データ件数を3件に絞り、新しいシートを追加して図6のようなグラフを作成しておく。

 これは、Tips「Excelグラフにタイトル、凡例、データラベルを表示する」でも解説した「凡例項目の“横”と“縦”を変えるには」のように、凡例を選択してマウスの右クリックで表示される[データの選択]から[行/列の入れ替え]を実行している。

 また、Excelメニューの[挿入]→[図形]と選択して「角丸四角形」を選択し、「パターンを適用」というボタンを配置している。

ExcelVBATipsGraph8_01.png 図6 生徒別の各科目の点数のデータをグラフ化している

 グラフにパターンを指定するPatternedメソッドの書式は下記の通りだ。

グラフにパターンを指定するPatternedメソッドの書式

With ActiveSheet.ChartObjects(1).Chart.SeriesCollection({インデックス番号}).Format.Fill

.Patterned {表2のパターン}

End With


 Patternedメソッドに表2のMsoPatternTypeを指定する。

表2  MsoPatternType
MsoPatternType 説明
msoPattern10Percent 2 前景色 10%
msoPattern20Percent 3 前景色 20%
msoPattern25Percent 4 前景色 25%
msoPattern30Percent 5 前景色 30%
msoPattern40Percent 6 前景色 40%
msoPattern50Percent 7 前景色 50%
msoPattern5Percent 1 前景色 5%
msoPattern60Percent 8 前景色 60%
msoPattern70Percent 9 前景色 70%
msoPattern75Percent 10 前景色 75%
msoPattern80Percent 11 前景色 80%
msoPattern90Percent 12 前景色 90%
msoPatternCross 51 クロス
msoPatternDarkDownwardDiagonal 15 前景色の右下がり対角線(反転)
msoPatternDarkHorizontal 13 前景色の横線(太)
msoPatternDarkUpwardDiagonal 16 前景色の右上がり対角線(反転)
msoPatternDarkVertical 14 前景色の縦線(太)
msoPatternDashedDownwardDiagonal 28 前景色の右下がり対角線(破線)
msoPatternDashedHorizontal 32 前景色の横線(破線)
msoPatternDashedUpwardDiagonal 27 前景色の右上がり対角線(破線)
msoPatternDashedVertical 31 前景色の縦線(破線)
msoPatternDiagonalBrick 40 前景色のれんが(斜め)
msoPatternDiagonalCross 54 斜めクロス
msoPatternDivot 46 前景色の切り込み
msoPatternDottedDiamond 24 前景色のひし形(点)
msoPatternDottedGrid 45 前景色の格子(点)
msoPatternDownwardDiagonal 52 右下対角線
msoPatternHorizontal 49 水平方向
msoPatternHorizontalBrick 35 前景色のれんが(横)
msoPatternLargeCheckerBoard 36 前景色と背景色を交互に使用した市松模様(大)
msoPatternLargeConfetti 33 前景色の紙吹雪(大)
msoPatternLargeGrid 34 前景色の市松模様(大)
msoPatternLightDownwardDiagonal 21 前景色の右下がり対角線
msoPatternLightHorizontal 19 前景色の横線
msoPatternLightUpwardDiagonal 22 前景色の右上がり対角線
msoPatternLightVertical 20 前景色の縦線
msoPatternMixed -2 サポートされていない
msoPatternNarrowHorizontal 30 前景色の横線(反転)
msoPatternNarrowVertical 29 前景色の縦線(反転)
msoPatternOutlinedDiamond 41 前景色のひし形(枠のみ)
msoPatternPlaid 42 前景色の幅広の縦線と前景色40%の幅広の横線を組み合わせた編み込み
msoPatternShingle 47 うろこ
msoPatternSmallCheckerBoard 17 前景色と背景色を交互に使用した市松模様(小)
msoPatternSmallConfetti 37 前景色の紙ふぶき(小)
msoPatternSmallGrid 23 前景色の格子(小)
msoPatternSolidDiamond 39 前景色と背景色を交互に使用したひし形(強調)
msoPatternSphere 43 前景色と背景色を使用した3-Dの球
msoPatternTrellis 18 前景色のざらざら
msoPatternUpwardDiagonal 53 右上対角線
msoPatternVertical 50 垂直方向
msoPatternWave 48 前景色の小波
msoPatternWeave 44 前景色の網目
msoPatternWideDownwardDiagonal 25 前景色の右下がり対角線(太)
msoPatternWideUpwardDiagonal 26 前景色の右上がり対角線(太)
msoPatternZigZag 38 大波
参考:MsoPatternType Enumeration(Office)- MSDN

 Excelメニューの[開発]→[挿入]から、コンボボックスを配置して、マウスの右クリックで表示される[コントロ―ル]の書式設定で、[入力範囲]に各パターンを入力している「U1:U55」までを指定し、[リンクするセル]にはセル「S5」を指定しておく。

 これらを指定すると、Tips「Excelグラフで特定のデータを目立たせるテクニック」の「絶対参照と相対参照について」で解説した、「$」マークの入った「絶対参照」となる。

 次に、表2の値を「V1:V55」までのセルに入力しておく。全て設定した画面が図7になる。

ExcelVBATipsGraph8_02.png 図7 コンボボックスに表示されるパターンと値をセルに記述し、選択した項目のインデックスを表示するセルを用意する

 では、実際にマクロを記述してみよう。Module1にリスト4のコードを記述する。

Option Explicit
Sub グラフにパターンを適用する()
  Dim パターン As Integer
  パターン = Cells(Range("S5").Value, 22)
  With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(2).Format.Fill
.Patterned パターン
  End With
End Sub
リスト4 グラフにパターンを指定するコード

 まず、3行目でInteger型変数「パターン」を宣言している。

 次に、4行目で「Cells({行番号},{列番号})」の書式にのっとって、コンボボックスから選択されたインデックス値が表示される「S5」の値を{行番号}に指定し、{列番号}には「V列」である「22列」目を指定している。このCellsの値を変数「パターン」に格納する。ここで重要なのは、選択した「パターン」と値を一致させることだ。

 5行目で値の格納された変数「パターン」を、Patternedメソッドに指定する。

 コンボボックスを選択して、マウスの右クリックで表示されるメニューから「マクロの登録」を選択し、リスト4のマクロを関連付け実行すると、図8のように「夏目」のグラフにコンボボックスから選択されたパターンが適用される。これで、どのパターンが、どのような模様なのか一目瞭然だ。

ExcelVBATipsGraph8_03.png 図8 「夏目」のグラフに、コンボボックスより選択したパターンが適用された

グラフの書式をクリアするClearToMatchStyleメソッド

 最後に、「グラフの書式をクリアする」方法について解説しよう。図8に適用したパターンをクリアして、元の状態に戻す処理になる。図7に「書式のクリア」というボタンを追加している。

グラフの書式をクリアするClearToMatchStyleメソッドの書式

ActiveSheet.ChartObjects(1).Chart.ClearToMatchStyle


 ClearToMatchStyleメソッドで、グラフに適用していた書式をクリアして、標準書式に戻すことができる。

 先ほど追加したModule1内にリスト5のコードを記述する。

Sub グラフの書式をクリア()
  ActiveSheet.ChartObjects(1).Chart.ClearToMatchStyle
End Sub
リスト5 グラフの書式をクリアするコード

 ここでは、ClearToMatchStyleメソッドで、表示されているグラフの書式を標準の書式に戻している。

 リスト5を「書式のクリア」ボタンに関連付け実行すると、図9のように「夏目」のグラフが元の標準のグラフに戻る。

ExcelVBATipsGraph8_04.png 図9 「夏目」のグラフが元の標準のグラフに戻った

次回は、折れ線グラフで特定のデータを目立たせるTips

 「グラフを指定した色に変更する」Tipsは、個別に凡例で確認しなくても、コンボボックスから選択した人物のグラフが赤で表示され、データの推移が一目瞭然で、大変に有益なTipsではないかと思う。ぜひ、読者の皆さんの職場で利用してみてほしい。

 社内でExcelを使ってプレゼンテーションを行う場合にも利用できると思う。次回も特定のデータを目立たせるTipsで、今度は折れ線グラフで使えるテクニックを紹介するので、お楽しみに。

著者プロフィール

kuniyasu.jpg

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。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)。

Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。