昨日の記事が少しぶっきらぼうだったので、補足。
それにmoug.netのログが消えたら意味がわからないでしょうし。
結論から簡単に書くと、
『VBAで条件付書式を設定する時、その条件がセルアドレスを参照する数式条件の場合は、コード実行時のActiveCellの位置によって数式条件のセルアドレスが相対的に変化してしまう。
∴条件付書式を設定する範囲の基点セルをSelectして実行するか、数式をR1C1形式で記述する。
(R1C1形式で設定する場合はSelect不要)』
という事です。
まずテストコード全掲載。
Sub pre()実行後。

基点セルから5x5の範囲に条件付書式を設定します。
Sub test1()実行後。

本当は『=自アドレス=1』の数式条件を満たすセルに色づけしたいのですが、
r.Offset(1).Select
しているために、基点セルB2の数式条件がずれてしまいます。

(Offsetせず、基点rをSelectすればずれません)
Selectしたくない、もしくはSheetをActiveにしたくない場合、数式をR1C1形式にします。
Sub test2()実行後。

ActiveCellの位置関係なく、数式条件が正しく設定されます。
ついでに。
条件付書式で設定された条件内の数式を取得したい場合もActiveCellとの相対位置によって数式が変化します。
これは数式をR1C1形式で記述したtest2でも同様です。
これを、ActiveCell位置に関係なく取得したい場合は、Applicationのアドレス参照形式をR1C1形式に変更します。
Sub test3()での
test1からtest3まで実行したイミディエイトウィンドウの結果は
【2003の場合】
ちなみに、
【2007の場合】
こういった事象に対する質疑って、Q&A掲示板ではあまり見かけませんが、VBAで条件付書式を設定する時のセオリーのようですね。
『Excelノート 6-1 書式 14 マクロで条件付書式(数式)を設定するには?』
http://park11.wakwak.com/~miko/Excel_Note/06-01_shoshiki.htm#06-01-14
さらに深い過去ログ
『条件付書式の数式の評価について』
http://www.keep-on.com/excelyou/1999lng4/199909/99090110.txt
『条件付書式による色をVBAから取得するには?』
http://www.keep-on.com/excelyou/2000lng4/200005/00050350.txt
#こういった情報があると、やっぱり過去ログって先人の経験と知恵が詰まったおタカラだよなぁって思います。
#それを探り当てる検索エンジンも凄いっ...てのも言えるかもしれませんけどね :D
それにmoug.netのログが消えたら意味がわからないでしょうし。
結論から簡単に書くと、
『VBAで条件付書式を設定する時、その条件がセルアドレスを参照する数式条件の場合は、コード実行時のActiveCellの位置によって数式条件のセルアドレスが相対的に変化してしまう。
∴条件付書式を設定する範囲の基点セルをSelectして実行するか、数式をR1C1形式で記述する。
(R1C1形式で設定する場合はSelect不要)』
という事です。
まずテストコード全掲載。
Option Explicit Const KITEN = "B2" 'テスト範囲基点のアドレス '--------------------------------------------------------------------- Sub pre() Dim r As Range Dim f As Boolean f = True With Sheets(1) For Each r In .Range(KITEN).Resize(5, 5) If f Then r.Value = 1 f = Not f Next End With End Sub '--------------------------------------------------------------------- Sub test1() Dim r As Range With Sheets(1) Set r = .Range(KITEN) r.Offset(1).Select With r.Resize(5, 5).FormatConditions .Delete .Add(Type:=xlExpression, Formula1:="=" & KITEN & "=1" _ ).Interior.ColorIndex = 6 End With End With Debug.Print "test1_1", r.FormatConditions(1).Formula1 r.Select Debug.Print "test1_2", r.FormatConditions(1).Formula1 Set r = Nothing End Sub '--------------------------------------------------------------------- Sub test2() Dim r As Range With Sheets(1) Set r = .Range(KITEN) r.Offset(1).Select With r.Resize(5, 5).FormatConditions .Delete .Add(Type:=xlExpression, Formula1:="=RC=1" _ ).Interior.ColorIndex = 6 End With End With Debug.Print "test2_1", r.FormatConditions(1).Formula1 r.Select Debug.Print "test2_2", r.FormatConditions(1).Formula1 Set r = Nothing End Sub '--------------------------------------------------------------------- Sub test3() Dim r As Range Dim ref As Long With Application ref = .ReferenceStyle .ReferenceStyle = xlR1C1 End With With Sheets(1) Set r = .Range(KITEN) r.Offset(1).Select With r.Resize(5, 5).FormatConditions .Delete .Add(Type:=xlExpression, Formula1:="=RC=1" _ ).Interior.ColorIndex = 6 End With End With Debug.Print "test3_1", r.FormatConditions(1).Formula1 r.Select Debug.Print "test3_2", r.FormatConditions(1).Formula1 Application.ReferenceStyle = ref Set r = Nothing End Sub
Sub pre()実行後。

基点セルから5x5の範囲に条件付書式を設定します。
Sub test1()実行後。

本当は『=自アドレス=1』の数式条件を満たすセルに色づけしたいのですが、
r.Offset(1).Select
しているために、基点セルB2の数式条件がずれてしまいます。

(Offsetせず、基点rをSelectすればずれません)
Selectしたくない、もしくはSheetをActiveにしたくない場合、数式をR1C1形式にします。
Sub test2()実行後。

ActiveCellの位置関係なく、数式条件が正しく設定されます。
ついでに。
条件付書式で設定された条件内の数式を取得したい場合もActiveCellとの相対位置によって数式が変化します。
これは数式をR1C1形式で記述したtest2でも同様です。
Debug.Print "test2_1", r.FormatConditions(1).Formula1
r.Select
Debug.Print "test2_2", r.FormatConditions(1).Formula1
この部分。結果はr.Select
Debug.Print "test2_2", r.FormatConditions(1).Formula1
test2_1 =B3=1
test2_2 =B2=1
同じ r の条件が変化しています。test2_2 =B2=1
これを、ActiveCell位置に関係なく取得したい場合は、Applicationのアドレス参照形式をR1C1形式に変更します。
Sub test3()での
With Application
ref = .ReferenceStyle
.ReferenceStyle = xlR1C1
End With
この部分。(後で戻しています)ref = .ReferenceStyle
.ReferenceStyle = xlR1C1
End With
test1からtest3まで実行したイミディエイトウィンドウの結果は
【2003の場合】
test1_1 =B2=1
test1_2 =B1=1
test2_1 =B3=1
test2_2 =B2=1
test3_1 =RC=1
test3_2 =RC=1
こうなります。test1_2 =B1=1
test2_1 =B3=1
test2_2 =B2=1
test3_1 =RC=1
test3_2 =RC=1
ちなみに、
【2007の場合】
test1_1 =B1=1
test1_2 =B1=1
test2_1 =B2=1
test2_2 =B2=1
test3_1 =B2=1
test3_2 =B2=1
2007では条件取得時のアドレスの変化については改善されているようです。test1_2 =B1=1
test2_1 =B2=1
test2_2 =B2=1
test3_1 =B2=1
test3_2 =B2=1
こういった事象に対する質疑って、Q&A掲示板ではあまり見かけませんが、VBAで条件付書式を設定する時のセオリーのようですね。
『Excelノート 6-1 書式 14 マクロで条件付書式(数式)を設定するには?』
http://park11.wakwak.com/~miko/Excel_Note/06-01_shoshiki.htm#06-01-14
さらに深い過去ログ
『条件付書式の数式の評価について』
http://www.keep-on.com/excelyou/1999lng4/199909/99090110.txt
『条件付書式による色をVBAから取得するには?』
http://www.keep-on.com/excelyou/2000lng4/200005/00050350.txt
#こういった情報があると、やっぱり過去ログって先人の経験と知恵が詰まったおタカラだよなぁって思います。
#それを探り当てる検索エンジンも凄いっ...てのも言えるかもしれませんけどね :D