HOME > 即効テクニック > Excel VBA > 書式設定関連のテクニック > 条件付き書式の条件を調べる(2)

即効テクニック

書式設定関連のテクニック

条件付き書式の条件を調べる(2)

(Excel 97/2000/2002/2003)
条件付き書式の「数式が」で設定した数式は、次のマクロで取得可能です。

Sub Sample1()
 Dim i As Long
 For i = 2 To 5
   Cells(i, 2).Activate
   Cells(i, 3) = ActiveCell.FormatConditions(1).Formula1
 Next i
End Sub
条件に設定した数式で相対参照形式のアドレスを指定している場合、アクティブセルの位置でアドレスが変化してしまうので、上記のようにアクティブセルを移動しながら取得しています。 さて、もうひとつの「セルの値が」で設定した条件を調べるにはどうしたらいいでしょう。 まずは同じようにFormula1プロパティで調べてみましょう。 なお、ここでは、セルB2に「セルの値が」「次の値より大きい」「50」という条件が設定されているものとします。
Sub Sample2()
  Dim buf As String
  buf = Range("B2").FormatConditions(1).Formula1
  MsgBox buf
End Sub   
実行すると「50」が表示されます。 では、「次の値の間」「50」「80」だったらそうでしょう。 2つめの条件「80」はFormula2プロパティで取得できます。
Sub Sample3()
  Dim buf As String
  With Range("B2").FormatConditions(1)
    buf = .Formula1 & vbCrLf & .Formula2
  End With
  MsgBox buf
End Sub   
問題は「次の値の間」や「次の値より大きい」などの種類です。 これは、FormatConditionオブジェクトのOperatorプロパティで取得できます。
Sub Sample4()
  Dim buf As String
  With Range("B2").FormatConditions(1)
    buf = .Operator & vbCrLf & .Formula1 & vbCrLf & .Formula2
  End With
  MsgBox buf
End Sub
Operatorプロパティが返すのは、次のような定数です。 それぞれを数式に変換すると、次のようになります。 なお、ここでは条件付き書式がセルC1に設定されているものとします。
Sub Sample5()
  Dim buf As String, Ad As String
  Ad = ActiveCell.Address(False, False)
  With ActiveCell.FormatConditions(1)
    Select Case .Operator
    Case 1
      buf = "=AND(" & .Formula1 & "<=" & Ad & "," & Ad & "<=" & .Formula2 & ")"
    Case 2
      buf = "=NOT(AND(" & .Formula1 & "<=" & Ad & "," & Ad & "<=" & .Formula2 & "))"
    Case 3
      buf = "=" & Ad & "=" & .Formula1
    Case 4
      buf = "=" & Ad & "<>" & .Formula1
    Case 5
     buf = "=" & Ad & ">" & .Formula1
    Case 6
      buf = "=" & Ad & "<" & .Formula1
    Case 7
      buf = "=" & Ad & ">=" & .Formula1
    Case 8
      buf = "=" & Ad & "<=" & .Formula1
    End Select
  End With
  MsgBox buf
End Sub   
「セルの値が」の条件を数式に変換するのは大変ですね。