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

VBA セルの条件付き書式を取得する

はじめに

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

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

条件付き書式

Excel 2007 以降

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

4

Excel 2003

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

1

セルの条件付き書式を取得する

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

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

Dim fcs As FormatConditions
Set fcs = Range("A1").FormatConditions
Debug.Print(fcs.Count)

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

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

Dim fcs As FormatConditions
Set fcs = Cells(1, 1).FormatConditions ' A1
Set fcs = Cells(2, 1).FormatConditions ' A2
Set fcs = Cells(1, 2).FormatConditions ' B1
Set fcs = Cells(2, 2).FormatConditions ' B2
Debug.Print(fcs.Count)

FormatConditions はコレクションになっており、インデックスに対応する条件付き書式が入っています。

Dim fcs As FormatConditions
Set fcs = Range("A1").FormatConditions

Dim fc As FormatCondition
Set fc = fcs(1) ' 1 つ目の条件付き書式を取得
Set fc = fcs(2) ' 2 つ目の条件付き書式を取得

' 条件の取得
Dim l As Long
Dim s As String
l = fc.Type     ' 条件の種類
l = fc.Operator ' 条件
s = fc.Formula1 ' 1 つ目の値
s = fc.Formula2 ' 2 つ目の値

' 書式の取得
Dim bs As Borders
Dim f As Font
Dim i As Interior
Set bs = fc.Borders ' 罫線
Set f = fc.Font     ' フォント
Set i = fc.Interior ' 背景

条件付き書式を設定していないセルから取得しようとするとエラーが発生します。

条件付き書式がいくつ設定されているか確認するには FormatConditions.Count を使用します。

' 条件付き書式なし
Debug.Print(Range("A1").FormatConditions(1).Type) ' エラー発生
Debug.Print(Range("A1").FormatConditions.Count) ' 0

' 条件付き書式 2 つ設定
Debug.Print(Range("A1").FormatConditions.Count) ' 2

条件とプロパティの対応は次のようになっています。

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
Debug.Print(Range("A1").FormatConditions(1).Formula2) ' エラー発生
Excel 2007 から追加された条件では、罫線や背景色以外の書式が設定できます。どういった書式を取得できるかは「マクロの記録」で Excel を操作して、どういう値が設定されているか参照してみてください。

セルの範囲の条件付き書式を取得する

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

Dim fcs As FormatConditions
Set fcs = Range("A1:B2").FormatConditions
Set fcs = Range("A1", "B2").FormatConditions
Debug.Print(fcs.Count)

指定した範囲の条件付き書式が全て同じであれば、それを取得します。一つでも違う値があれば Count が -1 を返し取得できません。

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

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

' どちらも同じコード
Dim fcs As FormatConditions
Set fcs = Range("A1").FormatConditions
Set fcs = ActiveSheet.Range("A1").FormatConditions

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

1

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

Dim fcs As FormatConditions
' Sheet1 のセル「A1」の条件付き書式を取得
Set fcs = Sheets("Sheet1").Range("A1").FormatConditions
Set fcs = Sheets(1).Range("A1").FormatConditions
Debug.Print(fcs.Count)

' Sheet2 のセル「A1」の条件付き書式を取得
Set fcs = Sheets("Sheet2").Range("A1").FormatConditions
Set fcs = Sheets(2).Range("A1").FormatConditions
Debug.Print(fcs.Count)

関連ページ