即効テクニック |
条件付き書式の「数式が」で設定した数式は、次のマクロで取得可能です。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 SubOperatorプロパティが返すのは、次のような定数です。それぞれを数式に変換すると、次のようになります。 なお、ここでは条件付き書式がセル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「セルの値が」の条件を数式に変換するのは大変ですね。