図形の色を設定する方法

VBA

特定の図形だけ色を変えるマクロとか便利だよね

クリックしたら色が変わるとかも良いよね

じゃあVBAで図形の色を変える方法を紹介するよ

手動でやるとこんな感じかな・・・

図形の色を変える方法をご紹介していきます。

カラーインデックス、RGBの設定方法についてはこちら↓↓↓もぜひ参考にして下さいね。

カラーインデックスを指定して色を変える方法

てかカラーインデックスってなんだ?

1の色~、2の色~って番号付けてある色があるんだ

カラーインデックスについて

良く使いそうな色に番号をつけてあって、その番号をカラーインデックスと言います。
以下に初期値の0~15までを並べてみました。

構文

Visio VBAで図形の塗りつぶしの色を変更する構文はこちら。

Cells(“FillForegnd”) = カラーインデックス

Sample

選択中の図形の色を取得・変更するサンプルです。
何かしら図形を描いて選択しておいてください。

コード

Sub test1()

    '現在の色のカラーインデックスを取得します。
    MsgBox (ActiveWindow.Selection(1).Cells("FillForegnd"))
    
    '色を変えます。
    ActiveWindow.Selection(1).Cells("FillForegnd") = 3

End Sub

塗りつぶしの色をカラーインデックス3(緑)に変更します。

実行結果

まずカラーインデックスの番号、この時は「1」がメッセージボックスが出ます。
OKを押すと四角形の色が緑に変わったと思います。

RGBを指定して色を変える方法

てかRGBカラーってなんだ?

光の三原色R:赤、G緑、B青で色を表す方法だよ

RGBについて

色を光の3原色RGBで指定します。数字が大きい方が色が濃くなり、混色して色を表します。例えばRが255G他が0なら赤、RとGが255でBが0なら黄色など。PCのディスプレイで表される色はRGBで表現できます。

RGB設定範囲
Red(赤)   0~255    
Green(緑)0~255
Blue(青)0~255

構文

Visio VBAで図形の色を変更する構文はこちら。

Cells(“FillForegnd”) .Formula = “RGB(Rの値,Gの値,Bの値)”
※RGBの値は0~255で指定

Sample

選択中の図形の色を変えるさせるサンプルです。
何かしら図形を描いて選択しておいてください。

コード

Sub test1()

    '色を変えます。
    ActiveWindow.Selection(1).Cells("FillForegnd") .Formula = "RGB(255,255,0)"

End Sub

実行結果

四角形の色が黄色に変わったと思います。

描く時に色を指定する方法

描く時にも指定できるって言ってたよね?

うん!Withを使うと一度いろんな書式を指定できるよ

Sample

図形を描画し、書式を変更するサンプルです。

コード

Sub test5()

Dim DrawRect As Object

  '四角を描きます。
  Set DrawRect = ActivePage.DrawRectangle(4, 7, 3, 8)
  With DrawRect
      .Name = "Shikaku"                 '図形の名前をShikakuにする
      .Cells("LinePattern") = 1         '線の種類を実線にする
      .Cells("FillForegnd") = 3         '塗りつぶしの色を緑(インデックス3)にする
  End With

End Sub

実行結果

こんな図形が描けたのではないでしょうか。

図形の名前をチェックして色を変えてみた

「Shikaku2」など名前後ろに偶数の数字が付いている図形だけを赤くしてみるよ。

Sample

名前がShikaku+偶数の数字である図形を赤くします。
四角形が10個、名前がShikaku0~Shikaku9だったとします。

コード

Sub test11()
Dim Namae As String

    '図形の数を数え、その回数繰り返す
    For i = 1 To ActiveWindow.Page.Shapes.Count

        '名前を取得
        Namae = ActiveWindow.Page.Shapes(i).Name

        '名前がShikakuで、付いている数字が偶数なら赤くする
        If (Left(Namae, 7) = "Shikaku" And Right(Namae, 1) Mod 2 = 0) Then
    
             ActiveWindow.Page.Shapes.Item(Namae).Cells("FillForegnd").Formula = "RGB(255,0,0)"
        
        End If
    
    Next
    
End Sub

①Countはシェイプの全体数なので、全ての図形に対して繰り返します。
②名前を取得してNamaeという変数に入れます。
③NameがShikaku+偶数である時に色を赤に変えます。

実行結果

こんな感じで四角が1個おきに赤くなったのではないでしょうか。

こんなのあったら嬉しい場面って結構あるかも

タイトルとURLをコピーしました