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

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

はじめに

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

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

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

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

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)

範囲の各セルの条件付き書式を取得します。

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

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

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

sheet1

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

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

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


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

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


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