サイトについて      連絡先   検索

VBA セルに条件付き書式を設定する

はじめに

Excel VBA のセルに条件付き書式を設定する方法を紹介します。

Range.FormatConditions プロパティか Cells.FormatConditions プロパティで条件付き書式を設定できます。

条件付き書式

Excel 2007 以降

Excel で条件付き書式を設定するには、「ホーム」タブをクリックし「条件付き書式」をクリックして「ルールの管理」をクリックします。

4

Excel 2003

Excel で条件付き書式を設定するには、「書式」メニューをクリックして「条件付き書式」をクリックします。

1

セルに条件付き書式を設定する

Excel 2007 から条件付き書式の設定が複雑になっています。VBA で設定するより Excel で操作した方がやりやすいです。VBA で値をどう設定すればどうなるのかは、「マクロの記録」で出力されたコードを参照するとわかりやすいと思います。

条件を設定

Range の引数にセル名を指定すると、そのセルに条件付き書式を設定できます。

セル「A1」に条件付き書式を設定するには Range("A1").FormatConditions.Add のように指定します。

Dim fc As FormatCondition
Set fc = Range("A1").FormatConditions.Add(xlCellValue, xlBetween, "1", "20")

Call Range("A1").FormatConditions.Add(xlCellValue, xlBetween, "1", "20")
1

Cells の引数にセルの行と列の番号を指定すると、そのセルに条件付き書式を設定できます。

行「2」、列「A」に条件付き書式を設定するには Cells(2, 1).FormatConditions.Add のように指定します。

Call Cells(1, 1).FormatConditions.Add(xlCellValue, xlBetween, "1", "20") ' A1
Call Cells(2, 1).FormatConditions.Add(xlCellValue, xlBetween, "1", "20") ' A2
Call Cells(1, 2).FormatConditions.Add(xlCellValue, xlBetween, "1", "20") ' B1
Call Cells(2, 2).FormatConditions.Add(xlCellValue, xlBetween, "1", "20") ' B2

FormatConditions.Add を呼び出すとき Call を付けないと必ず変数に戻り値を代入する必要があります。

Excel 2007 から複雑な条件付き書式が可能になりました。それにともない Add メソッドの種類も増えています。

メソッド名 説明
Addセルの値
AddAboveAverage平均以上の条件
AddColorScaleカラー スケール
AddDatabarデータバー
AddIconSetConditionアイコン セット
AddTop10上位 10 の値
AddUniqueValues一意の値

FormatConditions.Add の引数と条件の対応は次のようになっています。

FormatConditions.Add(Type, Operator, Formula1, Formula2)
2

Type の値は次のものがあります。

定数名 説明
xlCellValue1セルの値が
xlExpression2数式が
Excel 2007 以降では次の値が追加されています。
xlColorScale3カラー スケール
xlDatabar4データバー
xlTop105上位の 10 の値
XlIconSet6アイコン セット
xlUniqueValues8一意の値
xlTextString9テキスト文字列
xlBlanksCondition10空白の条件
xlTimePeriod11期間
xlAboveAverageCondition12平均以上の条件
xlNoBlanksCondition13空白の条件なし
xlErrorsCondition16エラー条件
xlNoErrorsCondition17エラー条件なし

Operator の値は次のものがあります。

定数名 説明
xlBetween1次の値の間
xlNotBetween2次の値の間以外
xlEqual3次の値に等しい
xlNotEqual4次の値に等しくない
xlGreater5次の値より大きい
xlLess6次の値より小さい
xlGreaterEqual7次の値以上
xlLessEqual8次の値以下

次の画像のように値を一つしか入力できない条件を設定するときに、Formula2 を設定しようとするとエラーが発生します。

Formula2 を設定できるのは Operator が xlBetween (1) と xlNotBetween (2) のときです。

3
Call Range("A1").FormatConditions.Add(xlCellValue, xlEqual, "1", "20") ' エラー発生
Add~ メソッドについては説明を省略します。「マクロの記録」で Excel を操作して、どういう値が設定されているか参照してみてください。

追加できる条件付き書式は 3 つまでです。それ以上設定しようとするとエラーが発生します。

書式を設定

書式を設定するには FormatConditions.Add の戻り値に設定するか、FormatConditions のインデックスの条件付き書式に設定します。


Dim fc As FormatCondition
Set fc = Range("A1").FormatConditions.Add(xlCellValue, xlBetween, "1", "20") ' 追加した条件付き書式を取得

Set fc = Range("A1").FormatConditions(1) ' 1 つ目の条件付き書式を取得
Set fc = Range("A1").FormatConditions(2) ' 2 つ目の条件付き書式を取得

' 書式の設定
fc.Borders.LineStyle = xlContinuous ' 罫線
fc.Font.Color = RGB(255, 0, 0)      ' フォント
fc.Interior.ColorIndex = 2          ' 背景

書式の内容については次のページをご覧ください。

Add~ メソッドについては説明を省略します。「マクロの記録」で Excel を操作して、どういう値が設定されているか参照してみてください。

セルの条件付き書式を削除する

条件付き書式を削除するには FormatConditions.Delete のように指定します。

一つ目だけなど指定した条件付き書式を削除するには FormatConditions(1).Delete のように指定します。

Range("A1").FormatConditions.Delete ' 全ての条件付き書式を削除
Range("A1").FormatConditions(1) ' 1 つ目の条件付き書式を削除
Range("A1").FormatConditions(2) ' 2 つ目の条件付き書式を削除

セルの範囲に条件付き書式を設定する

セルの範囲「A1」~「B2」に同じ条件付き書式を設定するには Range("A1:B2").FormatConditions.Add または Range("A1", "B2").FormatConditions.Add のように指定します。

Call Range("A1:B2").FormatConditions.Add(xlCellValue, xlBetween, "1", "20")
Call Range("A1", "B2").FormatConditions.Add(xlCellValue, xlBetween, "1", "20")

指定した範囲の条件付き書式が全て同じときに設定できます。一つでも違う値があれば エラーが発生します。

指定したシートのセルに条件付き書式を設定する

Range.FormatConditions.Add とコードに書くと、アクティブなシートのセルに条件付き書式を設定します。これは ActiveSheet.Range.FormatConditions.Add の ActiveSheet が省略されています。

' どちらも同じコード
Call Range("A1").FormatConditions.Add(xlCellValue, xlEqual, "10")
Call ActiveSheet.Range("A1").FormatConditions.Add(xlCellValue, xlEqual, "10")

シートを指定するには Sheets の引数にシート名またはインデックスを指定します。

1

Sheet1 のシートを指定するには、Sheets("Sheet1") か Sheets(1) と書きます。

' Sheet1 のセル「A1」に条件付き書式を設定
Call Sheets("Sheet1").Range("A1").FormatConditions.Add(xlCellValue, xlEqual, "10")
Call Sheets(1).Range("A1").FormatConditions.Add(xlCellValue, xlEqual, "10")

' Sheet2 のセル「A1」に条件付き書式を設定
Call Sheets("Sheet2").Range("A1").FormatConditions.Add(xlCellValue, xlEqual, "10")
Call Sheets(2).Range("A1").FormatConditions.Add(xlCellValue, xlEqual, "10")

関連ページ