「塗りつぶしの網掛け」VBAを最速理解

cellspaintpatterneyecatch

エクセルVBA セルの書式設定「塗りつぶし」の中のパターン、つまり「網掛け」を設定するVBAコードです。
実用するには、多少の追加のコードが必要になります。

こんにちは じゅんぱ店長 (@junpa33) です。

今回はセルの書式設定の「塗りつぶし」の「パターン」をエクセルVBAで記述する方法です。

パターンとは「網掛け」のことです。

背景色だけでなく違った形での ” 目立たせ ” ツールとして準備されています。

今回はこれをVBAコード化しての利用方法を説明します。

「塗りつぶし」の網掛け(パターン)設定はこれです

パターン設定つまり網掛け設定は、「パターンの色」と「パターンの種類」からなります。

「パターン(網掛け)」が表示されるレイヤー位置は、つまりセルの表示のどの層かは、

最下層が「背景色」→中間層に「網掛け」→最上部に「入力文字」

という順になります。

つまり、最上位が「入力文字」であるので、どんな「パターン(網掛け)」であっても文字が消えることは無いということです。

ここで注意することは、

網掛けによって、文字が全く見えなくなることは避けなければいけない。

ということです。

パターン設定のVBAコードと入力文字「見える化」の対策

パターン(網掛け)を設定するのに利用するプロパティは、

背景色と同じ「Interiorプロパティ」を利用します。

Interiorプロパティの記述の構文は、

前回記事

vbacellspaintbackeyecatch「塗りつぶし」背景色をVBAで記述する

で確認してください。

パターンの種類を設定するVBAコード

パターン(網掛け)の種類は「なし」を含めて全部で18種類準備されています。

それぞれの網掛けの種類を指定する方法は、Interiorオブジェクトに対して、

「Patternプロパティ」を当てることでその属する定数を指定することが出来ます。

Patternプロパティ

 構文 

Rangeオブジェクト.Interior.Pattern = 定数

(番号は説明のため付けています)

番号 Patternの定数 説明 網掛け表示
1 xlPatternSolid 塗りつぶし(パターンなし) vbacellspaint_ami002
2 xlPatternGray75 75%灰色 vbacellspaint_ami003
3 xlPatternGray50 50%灰色 vbacellspaint_ami004
4 xlPatternGray25 25%灰色 vbacellspaint_ami005
5 xlPatternGray16 12.5%灰色 vbacellspaint_ami006
6 xlPatternGray8 6.25%灰色 vbacellspaint_ami007
7 xlPatternHorizontal 横縞模様 vbacellspaint_ami008
8 xlPatternVertical 縦縞模様 vbacellspaint_ami009
9 xlPatternDown 右下がり斜線縞模様 vbacellspaint_ami010
10 xlPatternUp 左下がり斜線縞模様 vbacellspaint_ami011
11 xlPatternChecker 左下がり斜線格子 vbacellspaint_ami012
12 xlPatternSemiGray75 極太線左下がり斜線格子 vbacellspaint_ami013
13 xlPatternLightHorizontal 実線横縞模様 vbacellspaint_ami014
14 xlPatternLightVertical 実線縦縞模様 vbacellspaint_ami015
15 xlPatternLightDown 実線右下がり斜線縞模様 vbacellspaint_ami016
16 xlPatternLightUp 実線左下がり斜線縞模様 vbacellspaint_ami017
17 xlPatternGrid 実線横格子 vbacellspaint_ami018
18 xlPatternCrissCross 実線左下がり斜線格子 vbacellspaint_ami019
19 xlPatternNone 塗りつぶしなし

 網掛け解除時の注意 

  •  10番目の定数「xlPatternNone」を使えばパターン(網掛け)を解除することが出来ます。と同時に、背景色を設定していた場合は背景色も解除されることになります。
  •  パターン(網掛け)だけを解除するときは、1番目の定数「xlPatternSolid」を使わないといけません。

網掛けのサンプルコード

5番と8番と15番と17番
HTML
Sub パターンサンプル1()
    Range("B3:B9").Value = "あいうえお" & 12345
'5番
    Range("B3").Interior.Pattern = xlPatternGray16
'8番
    Range("B5").Interior.Pattern = xlPatternVertical
'15番
    Range("B7").Interior.Pattern = xlPatternLightDown
'17番
    Range("B9").Interior.Pattern = xlPatternGrid
    Columns(2).AutoFit
End Sub
拡大率100%
拡大率200%

実使用で、視認性に耐えるのは、この中では ” 5番 ” の「12.5%灰色」だけのようです。

エクセル表示を200%まで拡大して ” 15番 ” の「実線右下がり斜線縞模様」まで見えるようになりました。

残りのパターンはまるで文字をモザイク処理しているようです。

パターンの色を設定するVBAコード

色についてはColorプロパティの関係ですが、

パターン(網掛け)については、「PatternColorプロパティ」「PatternColorIndexプロパティ」になります。

それぞれの網掛けの色を指定する方法は、Interiorオブジェクトに対して、

「PatternColorプロパティ」「PatternColorIndexプロパティ」を当てることで網掛けに色を指定することが出来ます。

PatternColorプロパティ

 構文 

Rangeオブジェクト.Interior.PatternColor = カラー定数 または RGB指定

Rangeオブジェクト.Interior.PatternColorIndex = インデックス番号

カラー定数、RGB指定やインデックス番号については、「背景色」の記事を参考にしてください。

vbacellspaintbackeyecatch「塗りつぶし」背景色をVBAで記述する

入力文字の「見える化」対策のVBAコード

折角、楽しそうなバリエーションのある「網掛け」なのに、使わない手はありません。

ただ問題は先の説明でしたように、網掛けによっては(ほとんどのパターンで)入力文字が見えなくなってしまいます。

網掛けに色付けをしても「見える化」にはそれほど有効ではありません。ではどうするか?

パターン(網掛け)の表示される色の濃度を薄くすることで、

網掛け特有の強調表示を残しながら文字の「見える化」をすることが出来ます。

パターンの色濃度を変化させるプロパティは、「PatternTintAndShadeプロパティ」です。

PatternTintAndShadeプロパティ

 構文 

Rangeオブジェクト.Interior.PatternTintAndShade = 設定値

設定値は「-1から+1 センター値は0」になります。

パターン(網掛け)の濃度変更テスト

8番の「縦縞模様」の色濃度変更テスト

「縦縞模様」はそのままでは、文字の視認が難しいパターンです。縞模様と文字が重なりにじんで見えません。

色濃度を0%から100%の間に6段階に分けてテストをします。パターンで使用する色は赤RGB(255,0,0)です。

入力文字は視認性を補助するため太字にしています。

「縦縞模様」の色濃度変更
Sub パターンサンプル2()
    Dim i As Long
        With Range("B2:B10")
            .Value = "あいうえお" & 12345
            .Font.Bold = True
        End With
    '8番
        With Range("B3").Interior
            .Pattern = xlPatternVertical
            .PatternColor = RGB(255, 0, 0)
        End With
        For i = 1 To 6
            With Range("B3").Offset(i)
                .Interior.Pattern = xlPatternVertical
                .Interior.PatternColor = RGB(255, 0, 0)
                .Interior.PatternTintAndShade = 0.1 * i * 1.5
                .Offset(, 1).Value = "濃度 " & _
       WorksheetFunction.Round((100 - (0.1 * i * 1.5) * 100), 0) & "%"
            End With
        Next i
        Columns(2).AutoFit
End Sub
拡大率100%
拡大率120%

この条件下の場合ですと、濃度25%であれば文字とパターン(網掛け)がしっかり分離されて視認することが出来ます。

パターン全部をテストすることはしていませんが、” 濃い系の網掛け ” であれば、色濃度10%から20%程度であれば、視認性も十分改善されると思われます。

「塗りつぶし」の網掛け設定のVBAコードのまとめ

セルの書式設定の「塗りつぶしのパターン」つまり「網掛け」について説明してきました。

たくさんの種類があって使いたくはなりますが、実際使ってみるとイマイチ良くありません。

「網掛けが濃い色過ぎて入力文字が見えない!」という問題です。

ここで「色濃度変更プロパティを知っているか、いないか、どっち?!」で、

運命の分かれ目、的に使うか使わないかが分かれそうです。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

vbabgcoloreyecatchセルの背景色を2クリックで他範囲にも展開できるマクロvbasorteyecatchデータの並び替え VBA新旧のSortを実データで実証vbacellsprotecteyecatch「セルの保護」の設定VBAを最速理解vbacellspaint_gradteyecatch「グラデーションの塗りつぶし」のセルを設定するcellspaintpatterneyecatch「塗りつぶしの網掛け」VBAを最速理解vbacellspaintbackeyecatch「塗りつぶし」背景色をVBAで記述するvbacellsbordereyecatch「罫線」のVBAを最速理解vbacellsfonteyecatch「フォント」の操作を最速理解する エクセルVBAvbacellsplacementeyecatch「配置」を最速理解する エクセルVBAvbacellssyoshikieyecatch「表示形式」をVBAコード的に最速理解するVBAcellareaeyecatchセルの範囲選択と設定は14のツールで対応するvbaendpropertyeyecatchEndプロパティで上下左右の最終セルを取得vbaentirecolumneyecatchEntireColumnとColumnの使い方vbaentireroweyecatchEntireRowとRowプロパティの違いvbacolumnseyecatchColumnsプロパティの列指定で参照するvbaunioneyecatchUnionとRangeの一括選択の働きを比較vbaresizeeyecatchResizeプロパティでセル範囲をサイズ変更vbarangevscellseyecatchRange VS Cells !VBAで使えるのはどっちvbausedrangeeyecatchUsedRangeプロパティの使い方のコツvbaborder1eyecatchBordersの/位置/線種/太さ/色/と<外枠だけの罫線>の設置vbarowseyecatchRowsプロパティの働きと関連のメソッドvbadeleteeyecatchセルの編集 DeleteとClearの使い分け 削除とクリアの違いvbacurrentregioneyecatchCurrentRegionは連続データをまとめて掴むSpecialCellseyecatchSpecialCellsメソッドはセル検索し選択するvbacharactereyecatchaCharactersで文字列中の一部の文字を加工するvbafontsyseyecatchaFontプロパティで文字装飾操作をするvbajyufukueyecatchエクセルVBA 同じ項目をまとめる(重複データの整理)コード作成vbafindeyecatch001Findメソッドでの検索の方法とコード組み立てのコツvbalastcelleyecatchデータ入力済セルの最終行番号を取得するvbaoffseteyecatchOffsetプロパティは指定範囲を移動させる

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。