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

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

はじめに

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

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

  • 目次
    • セルに条件付き書式を設定する
    • セルの条件付き書式を削除する
    • セルの範囲に条件付き書式を設定する
    • 指定したシートのセルに条件付き書式を設定する

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

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 を操作して、どういう値が設定されているか参照してみてください。

書式を設定

書式を設定するには 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を入力します。

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


Range("A1").FormatConditions.Delete ' すべての条件付き書式を削除

Range("A1").FormatConditions(1).Delete ' 1 つ目の条件付き書式を削除
Range("A1").FormatConditions(2).Delete ' 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")

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

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

Sheet1 を指定するにはWorksheets("Sheet1")またはWorksheets(1)を入力します。

sheet1

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

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

Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表すMe.が省略されています。


' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"

標準モジュールに Range や Cells を入力すると、アクティブなシートのセルになります。アクティブシートを表すActiveSheet.が省略されています。


' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"
  • 目次
    • セルに条件付き書式を設定する
    • セルの条件付き書式を削除する
    • セルの範囲に条件付き書式を設定する
    • 指定したシートのセルに条件付き書式を設定する