即効テクニック |
条件付き書式は、指定した条件に一致したときに書式を変化させる機能です。 ワークシート上では非常に便利な機能ですが、指定した条件に一致しているかどうかを確認するのは難しい作業です。 そこで、VBAを使って「設定した条件付き書式が反映されているか」を確認してみましょう。 まず、任意のセルに設定されている条件を調べてみます。 最初は「数式が」で設定した数式を取得します。 また、Excel 2003までの条件付き書式は最大で3つまで条件を指定できますが、ここでは最初の条件に指定した数式を例にします。 条件付き書式の条件に設定した数式は、FormatConditionオブジェクトのFormula1プロパティとFormula2プロパティで設定されます。 条件を3つまで指定できますので、FormatConditionオブジェクトはFormatConditions(1)からFormatConditions(3)のようにコレクションで指定します。 セルB2に「数式が」「=$A$1>5」という条件付き書式が設定されているとき、次のマクロで条件の数式を取得できます。Sub Sample1() Dim buf As String buf = Range("B2").FormatConditions(1).Formula1 MsgBox buf End Sub以外と簡単ですね。 しかし、条件付き書式には一筋縄ではいかない特徴があります。 今度は、同じセルB2に「=A1>5」という数式を設定してみます。 先と同じSample1マクロを実行するとどうなるでしょう。 正しい結果が得られる場合と、得られない場合があります。 このように相対参照形式で指定した条件付き書式の数式は、アクティブセルの位置に応じて、アドレスが自動的に調整されるからです。 試しに、アクティブセルをセルA1に移動してマクロを実行してください。 「=A1>5」の「A1」が相対的に調整されて「=IV65536>5」という数式が表示されます。 条件付き書式で設定した数式が相対参照形式のアドレスを使用していた場合、アクティブセルを、その条件付き書式が設定されているセルに移動しておかないと望む結果が得られないということです。 これは、複数のセルを選択して、条件付き書式を一括設定するケースでも起こります。 セル範囲B2:B5を選択して、「数式が」「=A1>5」の数式を条件に指定します。 セル範囲B2:B5の全セルに対して数式を取得するには、次のようにアクティブセルを順番に移動させなければなりません。Sub Sample2() Dim I As Long For I = 2 To 5 Cells(I, 2).Activate Cells(I, 3) = ActiveCell.FormatConditions(1).Formula1 Next I End Sub