Home » ExcelVBA Rangeオブジェクト » 条件付き書式 » 条件付き書式が設定されているかをVBAで調べる

条件付き書式が設定されているかをVBAで調べる

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「excelvba 条件付き書式が設定されているかを調べるには」
という検索キーワードでこのサイト・インストラクターのネタ帳へのアクセスがありました。

Excel VBA(Visual Basic for Applications)で、条件付き書式が設定されているかどうかを調べるには、どのようなコードを書けばいいのかを探していた方による検索です。

[スポンサードリンク]

FormatConditionsコレクションで条件付き書式が設定されているかを調べるサンプルマクロ

FormatConditonsコレクションオブジェクトのCountプロパティを調べるのが簡単でしょう。
Sub 条件付き書式が設定されているか調べる_FormatConditions_Count()
 If Cells.FormatConditions.Count = 0 Then
  MsgBox "条件付き書式は設定されていません。"
 Else
  MsgBox "条件付き書式が設定されています。"
 End If
End Sub

上記のSubプロシージャを実行すると、アクティブなワークシートに条件付き書式が設定されていないときには、
「条件付き書式は設定されていません。」
設定されていれば、
「条件付き書式が設定されています。」
とメッセージボックスが表示されます。

RangeオブジェクトのFormatConditionsプロパティで、

条件付き書式が設定されているかをVBAで調べる

条件付き書式を表すFormatConditionsコレクションオブジェクトを取得して、

条件付き書式が設定されているかをVBAで調べる

そのCountプロパティが「0」であれば、条件付き書式が設定されていないと判断できます。

上記のプロシージャでは、Cellsプロパティに引数を指定しないことで、全てのセルを表すRangeオブジェクトを取得して、そのFormatConditionsプロパティを利用していますが、
「Cells.FormatConditions.Count」を、
「ActiveCell.FormatConditions.Count」とすればアクティブなセルを、
「Selection.FormatConditions.Count」とすれば選択されているセル範囲を、
「Range("A1:G7").FormatConditions.Count」とすればA1:G7セルを、調べられます。

イミディエイトウィンドウから条件付き書式が設定されているかを調べる

FormatConditions.Countを調べるだけですから、イミディエイトウィンドウに
  ? cells.FormatConditions.Count
と入力して[Enter]キーを押して、「0」ならば条件付き書式は設定されていないという判断もできます。

Cellsプロパティに引数を指定しなければ、自動メンバー表示が行われますから、「cells.FormatConditions.Count」というオブジェクト式を入力するのも苦ではないはずです。

Range.SpecialCellsメソッドで条件付き書式が設定されているかを調べるサンプルマクロ

Excelの[ジャンプ]ダイアログから表示できる、

条件付き書式が設定されているかをVBAで調べる

[選択オプション]ダイアログを使って、

条件付き書式が設定されているかをVBAで調べる

条件付き書式の設定されているセルを選択する操作をご存じの場合、マクロ記録すると作られるコードに登場する、Range.SpecialCellsメソッドを使う方法を思いつくかもしれません。

条件付き書式が設定されているかをVBAで調べる

RangeオブジェクトのSpecialCellsメソッドを使って、条件付き書式が設定されているかを調べるには、以下のようなSubプロシージャでしょうか。

Sub 条件付き書式が設定されているか調べる_Range_SpecialCells()
 Dim rng As Range

 On Error Resume Next
 Set rng = Cells.SpecialCells(xlCellTypeAllFormatConditions)
 On Error GoTo 0

 If rng Is Nothing Then
  MsgBox "条件付き書式は設定されていません。"
 Else
  MsgBox "条件付き書式が設定されています。"
 End If
End Sub

Range.SpecialCellsメソッドは、該当するセルが見つかったときに、そのセルを表すRangeオブジェクトを返し、該当するセルが見つからない場合は、「該当するセルが見つかりません。」という実行時エラーが発生します。

そのため、Range.SpecialCellsメソッドを呼ぶ前に、
  On Error Resume Next
としておいてから、
  Set rng = Cells.SpecialCells(xlCellTypeAllFormatConditions)
で、Range.SpecialCellsメソッドの戻りをセットしたオブジェクト変数・rngが、オブジェクト変数の初期値・Nothingのままかどうかを調べています。
  If rng Is Nothing Then

オブジェクト変数や、On Error文を使っているため、先ほどのFormatConditions.Countプロパティを使うプロシージャよりも難易度は上がりますから、条件付き書式が設定されているかを調べるだけならば、FormatConditions.Countプロパティを使うほうが良さそうです。

ブック内の全ワークシートで条件付き書式が設定されているかを調べるサンプルマクロ

ブックに含まれるすべてのワークシートで、条件付き書式が設定されているかどうかを調べたい場合は、以下のようなループ処理を行いましょう。

Sub 条件付き書式が設定されているか調べる_全シート()
 Dim sh As Worksheet

 For Each sh in Worksheets
  If sh.Cells.FormatConditions.Count = 0 Then
   MsgBox "条件付き書式は設定されていません。"
  Else
   MsgBox "条件付き書式が設定されています。"
  End If
 Next sh
End Sub

すべてのワークシートに対するFor Each~Nextループの中で、
 For Each sh in Worksheets

FormatConditions.Countプロパティを利用しています。
  If sh.Cells.FormatConditions.Count = 0 Then

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » 条件付き書式 » 条件付き書式が設定されているかをVBAで調べる

Copyright © インストラクターのネタ帳 All Rights Reserved.

.