エクセルVBAの書式設定完全ガイド!色・条件付き書式まで
初心者エクセルVBAの書式設定で、表をラクに作りたい!



VBAを一度作ってしまえば、書式設定の繰り返しから解放されるよ!
この記事では、手動だと意外と手間がかかる「書式設定」について、エクセルVBAで一括設定する方法をご紹介します。
次の5つのコードがよく使われますので、まずはこの5つを押さえておきましょう。
NumberFormatLocalで表示形式を整えるInteriorでセルの背景色を設定Fontで文字の色や大きさを変更Bordersで罫線を引く- セルの結合は
Merge
これらのコードに加えて、FormatConditionsで条件付き書式を設定することで、入力内容に応じて書式を自動で変えられます。
コピペで使えるサンプルコードも活用しながら、一緒に試してみましょう!
書式設定以外にも、覚えておくと役立つエクセルVBAの便利ワザについて、以下の記事で解説しています。
エクセルVBAの書式設定はプロパティを変えるだけでOK
エクセルVBAで書式設定をすることで、地味に手間のかかるリスト作成が一括で完了します。
今回は、実務でありがちな「社員証再発行リスト」を例に、VBAで書式設定する方法を一緒に確認していきましょう。


VBAで書式設定する方法は、書式を変えたいセルを指定して、変えたい内容に応じたコードに値を入れるだけです。
書式に関わるコードは、主に次の4つです。
| コード | 内容 |
|---|---|
| NumberFormatLocal | 日付やケタ区切りなどの表示形式 |
| Interior | セルの背景 |
| Font | 文字の色やサイズ、フォントの種類 |
| Borders | 罫線 |
まずは、試しに、A1セルを黄色に塗るコードを書いてみましょう。


- 「開発」タブをクリック
- 「Visual Basic」を押す


- 「挿入」タブを押す
- 「標準モジュール」をクリック


- 「挿入」タブを押す
- 「プロシージャ」をクリック


- マクロ名を入力する
- 「OK」ボタンを押す


以下のコードをコピペしましょう。
Range("A1").Interior.Color = vbYellowこのコードは、「A1セルの背景Interiorの色Colorを黄色vbYellowにする」という意味です。


- 「▶」ボタンを押す
- エクセルに戻り、A1セルが黄色に塗られていることを確認
このコードを基本に、あとは「どのセルを・どう変えるか」の組み合わせを変えるだけで様々な書式設定ができます。
NumberFormatLocalで表示形式を設定しよう
ここではNumberFormatLocalというコードを使って、セルの表示形式を指定する方法を解説します。



表示形式とは、セルに入っている値を変えずに、見た目だけを整える機能だよ!
例えば「1500」を「1,500」と見せたり、「123」を「000123」と見せるなど、表示形式を整えるだけでリストがぐっと見やすくなるので、ぜひ、取り入れてみてください。
NumberFormatLocalと似たコードにNumberFormatがあります。
Localが末尾にあるかどうかの違いですが、主な違いは以下のとおりです。
NumberFormatLocal:ローカル言語表記に対応NumberFormat:英語表記に対応
日本国内で実務で使用する分にはNumberFormatLocalのみ覚えておけば大丈夫です。
作例として、「社員証再発行リスト」の次の3つの表示形式を変更します。


- 社員番号を文字列として扱う
- 申請日を「yyyymmdd」と表示する
- 費用に3ケタ区切りのカンマと「円」を付ける
数字の社員番号を文字列として扱う
数字を文字列として扱うコードは以下のとおりです。
Range("B3:B12").NumberFormatLocal = "@"@は、入力された内容を文字列としてそのまま表示するときに使用します。
これを設定しておくことで、社員番号など先頭に0があるものを入力しても、0が消えなくなります。
社員番号を必ず6ケタで表示し、足りない分を0で埋める場合のコードは次のとおりです。
Range("B3:B12").NumberFormatLocal = "000000"0は「1ケタ分の数字を必ず表示する」ルールです。
例えば123と入力しても、見た目は「000123」と表示されます。
申請日を区切りなしの「yyyymmdd」と表示する
日付を区切りなしで詰めて表示したいときは、次のようにコードを書きましょう。
Range("E3:E12").NumberFormatLocal = "yyyymmdd"yyyyは西暦4ケタ、mmは月、ddは日を表します。
yyyymmddをyyyy/mm/ddやyyyy-mm-ddに変えれば、区切りを設定することも可能です。
和暦で表示したい場合は以下のとおり設定します。
Range("E3:E12").NumberFormatLocal = "ggge年mm月dd日"gggが元号(令和)、eがその元号での年を表します。
費用に3ケタ区切りのカンマと「円」を付ける
数字に3ケタ区切りのカンマを挿入し、単位「円」を付けるコードは以下のとおりです。
Range("I3:I12").NumberFormatLocal = "#,##0円"#,##0で3ケタごとにカンマを入れることができ、その後ろに「円」を加えることで、1500が1,500円と表示されるようになります。
セルに入っている値は数値の1500のままであり、見た目に「円」が付くだけですので、計算に使うことができて便利です。
3つの表示形式を一度に指定するサンプルコード
上記3つの表示形式を一度に指定するサンプルコードは以下のとおりです。
Public Sub 表示形式を変更()
Range("B3:B12").NumberFormatLocal = "@"
Range("E3:E12").NumberFormatLocal = "yyyymmdd"
Range("I3:I12").NumberFormatLocal = "#,##0円"
End Subこのコードを実行すると、以下のようにリストが変化します。


- 社員番号が文字列となり、左揃えになった
- 申請日が区切りなしの年月日表示になった
- 費用にカンマと円が追加された
エクセルVBAでセルの背景色や網かけを設定する
VBAを使って、セルの背景色を変化させることができます。
背景色を変えるコードはInterior.Colorです。
例えば、見出しの行に色を付けるだけで、リストは一気に見やすくなります。
リストの見出し行である2行目に、背景色を付けてみましょう。
Public Sub 見出しに背景色を付ける()
Range("A2:I2").Interior.Color = RGB(221, 235, 247)
End SubこのVBAを実行すると、以下のように2行目のセルが水色になります。


モノクロ印刷が決まっているリストでは、背景色の代わりに網かけを使うと、モノクロでもはっきり区別できます。



網かけは斜線やドットの模様のことだよ!
網かけを設定するコードはInterior.Patternです。
社員証再発行リストの欄外で試してみましょう。
Public Sub 網かけサンプル()
Range("L3").Interior.Pattern = xlGray8
Range("L5").Interior.Pattern = xlGray16
Range("L7").Interior.Pattern = xlGray25
Range("L9").Interior.Pattern = xlPatternLightUp
Range("L11").Interior.Pattern = xlPatternLightDown
End Sub上記のコードを実行した結果は、以下のとおりです。


これ以外の網かけの種類については、マイクロソフト社のWebサイトをご確認ください。
Color・RGB・ColorIndexを使い分けよう
エクセルVBAで色を指定する方法は、3種類あります。
それぞれの違いを整理すると次の通りです。
| 種類 | 黄色を表示する場合の例 | 使える色 | 使い分けの視点 |
|---|---|---|---|
| RGB(赤,緑,青) | .Color = RGB(255, 255, 0) | 約1,677万色 | 細かく指定したいとき |
| 色の名前 | .Color = vbYellow | 基本色のみ | 手軽に済ませたいとき |
| ColorIndex | .ColorIndex = 6 | 56色まで | コードを短くしたいとき |
RGB(赤,緑,青)RGBは、色を赤・緑・青の3つの光の強さで指定する書き方です。
それぞれ0~255の数字で指定でき、数字が大きいほどその色が強くなります。



どの数字がどの色になるかは、エクセルの「塗りつぶしの色→その他の色」画面で確認できるよ!
vbRedが赤、vbGreenが緑、vbBlueが青など、覚えやすい基本色がそろっていますが、指定できる色はあまり多くありません。
指定できる色の一覧は、マイクロソフト社のWebサイトに掲載されています。
ColorIndexColorIndexで指定できる色の一覧についてもマイクロソフト社のWebサイトに掲載されています。
ColorIndexはコードを短く書ける一方で、使える色が56色までであり、番号に対応する色を毎回調べる必要があるため、あまりお勧めはしません。
色が細かく指定できて、実務で一番使いやすいRGBを基本使いし、他の2つについては「こういった指定方法がある」ということだけ覚えておきましょう。
エクセルVBAで背景色を消す方法
背景色を消したいときは、ColorIndexにxlNoneを指定します。



xlNoneは、「塗りつぶしなし」ということだよ!
A1セルの背景色を消すコードは、以下のとおりです。
Public Sub 背景色を消す()
Range("A1").Interior.ColorIndex = xlNone
End Subマクロを実行して、A1セルの背景色が消えることを確認しましょう。
フォントの種類や大きさ・色をVBAで設定する
前章ではセルの背景色を設定しましたが、セル内に書かれたフォント自体もVBAで設定することができます。
文字の見た目を整えるコードはFontです。
この後ろに、文字の色やサイズなど、変えたい内容を続けて指定します。
作例として、「社員証再発行リスト」のタイトルであるA1セルの文字を整えてみましょう。
Public Sub タイトルの文字を整える()
With Range("A1").Font
.Bold = True
.Size = 14
.Color = RGB(31, 78, 120)
.Name = "メイリオ"
End With
End Sub同じセルに複数の設定をするときは、With~End Withを使って範囲の指定を1回にまとめることで書き間違いを減らせます。
それぞれ以下の設定をしています。
.Bold = True:文字を太字にする.Size = 14:文字の大きさを14ポイントにする.Color = RGB(31, 78, 120):文字色を紺色にする.Name = "メイリオ":フォントの種類をメイリオにする


上記のコードを実行すると、このように一括で文字を整えることができます。
文字色の指定は、前の章の背景色の指定方法と全く同じであり、RGB・色の名前・ColorIndexの3つから選ぶことができます。
セルを塗る場合はInterior.Color、文字色を変える場合はFont.Colorです。
使用するコードを混同してしまいがちなので、セットで覚えておきましょう。
エクセルVBAで表の外周や内側に罫線を設定する
リストを囲む罫線もエクセルVBAで設定できます。
罫線を引くコードはBordersを使い、この後ろに引きたい罫線の内容を指定するだけです。
以下のコードは、A2からI12セルに対して、格子状の罫線を設定しています。
Public Sub リストに罫線を引く()
With Range("A2:I12").Borders
.LineStyle = xlContinuous
.Weight = xlThin
End With
End Sub前章と同様に、With~End Withを使って範囲の指定を1回にまとめています。
.LineStyleは罫線の種類xlContinuousは実線を表します。
点線にする場合はxlContinuousをxlDotに変えましょう。
.Weightは線の太さ.Weight = xlThinでは線の太さを細めに設定しています。
やや太めにする場合は、xlThinをxlMediumに変えましょう。
応用として、実務でよく使われる「外周がやや太め」「内側の横線は破線」「内側の縦線は実線」の罫線を引くコードをご紹介します。


サンプルコードは以下のとおりです。
Public Sub 外周と内側で罫線を変える()
With Range("A2:I12")
.BorderAround LineStyle:=xlContinuous, Weight:=xlMedium '外周
.Borders(xlInsideHorizontal).LineStyle = xlDot '内側の横線
.Borders(xlInsideVertical).LineStyle = xlContinuous '内側の縦線
End With
End Sub.BorderAroundは、指定範囲の外周だけにまとめて罫線を引くコードです。
また、Bordersに続けてカッコ内に位置を指定すれば、線を引く場所を細かく選べます。
線を引く場所を指定する際によく使うコードは、以下のとおりです。
| コード | 場所 |
|---|---|
| xlEdgeTop | 外枠の上 |
| xlEdgeBottom | 外枠の下 |
| xlInsideHorizontal | 内側の横線 |
| xlInsideVertical | 内側の縦線 |
罫線を消したい場合は、次のコードを使いましょう。
Range("A2:I12").Borders.LineStyle = xlLineStyleNoneこれで罫線が消え、線のない状態に戻ります。
VBAでセルの配置と結合・折り返し表示をするには
実務でリストを作るときによく使われるのが、タイトル行のセルを結合して中央に配置する書式です。


セルの結合と文字の中央揃えは、以下のコードで設定できます。
Public Sub タイトルを結合して中央に置く()
With Range("A1:I1")
.Merge
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
End Sub次の設定をしています。
.Merge:セルを結合する.HorizontalAlignment = xlCenter:文字の横方向を中央揃えにする.VerticalAlignment = xlCenter:文字の縦方向を中央揃えにする
なお、.HorizontalAlignmentと.VerticalAlignmentは、中央揃え以外にも設定できます。
主なコードは以下のとおりです。
| コード | 意味 | |
|---|---|---|
| .HorizontalAlignment 文字の横方向 | xlCenter | 中央揃え |
xlLeft | 左揃え | |
xlRight | 右揃え | |
| .VerticalAlignment 文字の縦方向 | xlCenter | 中央揃え |
xlTop | 上揃え | |
xlBottom | 下揃え |
セルの結合を解除したいときは、UnMergeを使います。
Range("A1:I1").UnMergeまた、データを並べ替えたり集計したりする場合は、セルの結合よりも「選択範囲内で中央」のほうが安全です。
「選択範囲内で中央」をするには、.HorizontalAlignmentを以下のように設定します。
Range("A1:I1").HorizontalAlignment = xlCenterAcrossSelection「セルの結合」を避けたい場合はご活用ください。
エクセルでは、セルの幅よりも長い文字を表示させるために、文字を折り返したり、文字を自動的に縮小して1行に収めたりすることがあります。
これらをVBAで行うときは以下のコードを使います。
Range("F3:F12").WrapText = True '折り返して表示
Range("F3:F12").ShrinkToFit = True '文字を縮小して1行に収めるなお、折り返して表示する.WrapTextと、文字を縮小する.ShrinkToFitは、両立することができません。
片方をTrueにすると、自動的にもう片方は無効になるので注意が必要です。
条件付き書式を設定するエクセルVBA
この章では、セルの値に応じて自動で書式が変わる「条件付き書式」を設定します。
エクセルの条件付き書式を、マクロで設定することが可能です。
一度設定してしまえば値を入力するだけで書式が切り替わるので、手作業でいちいち塗りなおす必要がなくなります。
例えば、以下のG列「発行状況」に、セルの色が切り替わる条件付き書式を設定してみましょう。


サンプルコードは以下のとおりです。
Public Sub 発行状況で色を変える()
Dim rng As Range
Set rng = Range("G3:G12")
rng.FormatConditions.Delete '既存の条件付き書式を消しておく
'「未対応」を赤にする
With rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=$G3=""未対応""")
.Interior.Color = RGB(255, 199, 206)
End With
'「対応中」を黄にする
With rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=$G3=""対応中""")
.Interior.Color = RGB(255, 235, 156)
End With
'「完了」を緑にする
With rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=$G3=""完了""")
.Interior.Color = RGB(198, 239, 206)
End With
End Sub条件付き書式を追加するコードはFormatConditions.Addです。
Addに続くカッコ内に、書式が切り替わる条件を設定します。
Type:=xlExpressionは、書式が切り替わる条件を数式で指定することを示しています。
Formula1:="=$G3=""未対応"""は、「G列の値が『未対応』なら」という条件です。
Formula1はエクセルVBAで条件付き書式で条件を指定するときなどに使われます。
変数rngに対象範囲であるRange("G3:G12")を格納しています。
同じ範囲を何回も書かずに済み、リストの範囲が変わってもコードの冒頭を修正するのみで済むので、書き方を覚えておくと便利です。
また、条件付き書式は、今日の日付を取得するTODAY()と組み合わせることで期限管理に使えます。
社員証の有効期限が30日以内に迫ったセルや、期限が過ぎたセルを、自動でオレンジ色に塗るコードをご紹介します。


Public Sub 期限間近を警告する()
Dim rng As Range
Set rng = Range("H3:H12")
rng.FormatConditions.Delete
'今日から30日以内なら色を付ける
With rng.FormatConditions.Add(Type:=xlExpression,Formula1:="=AND($H3<>"""",$H3<=TODAY()+30)")
.Interior.Color = RGB(255, 217, 102)
End With
End SubTODAY()は常に今日の日付を指すので、リストを開くたびに期限が近付いたセルが自動でオレンジ色になります。
"=AND($H3<>"""",$H3<=TODAY()+30)"は複雑に見えますが、「H列が空欄ではなく、なおかつ有効期限が今日から30日以内」という条件を指定しています。
セル番地やRGBの色をカスタマイズしてご活用ください。
エクセルVBAの書式設定に関するQ&A
エクセルVBAで書式を一括設定しよう!
エクセルVBAで表示形式や背景色、罫線などの書式設定をする方法を解説しました。
書式設定で一番大切なのは、「どのセルを・どう変えるか」という考え方です。
この型さえ理解すれば、あとは変えたい内容に応じてコードを差し替えるだけです。
それでは書式設定の主なコードをおさらいしましょう。
NumberFormatLocalで表示形式を整えるInteriorでセルの背景色を設定Fontで文字の色や大きさを変更Bordersで罫線を引く- セルの結合は
Merge
上記のコードに加えて、FormatConditionsで条件付き書式を設定することで、入力内容に応じて書式を自動で変えられます。
まずは実務に使えそうなコードを1行から試して、VBAで書式設定を自動化する便利さを実感してみてください!
今回の書式設定のほか、エクセルVBAの便利ワザを知りたい方は、以下をご参照いただけたら幸いです。