ある案件で、Excelシートを全自動で作る必要が出ました。
まあ、その程度はVBAで解決・・・、と思ったら、条件付き書式に指定した式がずれてしまう・・・。
初めは凡ミスかと思ってコードを確認しても、おかしな点は見当たらない。
で、ネットで調べてみたら、マイクロソフト公認のExcelのバグでした。
バグの概要
バグが発生する条件は、
- Excel2000以降(少なくとも2007では発生)
- 条件付き書式はVBAで指定する
- 条件は 相対セル参照 で指定する
- 選択したセル以外に条件付き書式を指定する
というもの。詳細はマイクロソフトのページをみてください。
回避方法
今回の案件では、上の3つはどうしても回避できない項目でした。
(マイクロソフトのページでは、「VBA使うな」とか「絶対参照で書け」なんて回避方法が紹介されてました)
でも、最後の「選択したセル以外に~」という項目は回避できます。
要は、「条件付き書式を指定したいセルを選択しておけばOK」ということです。
実際、そのようにコードを組んだら、あっさりと解決しました。
ちなみに、マイクロソフトのページにあったコードを、この方法で回避するとこうなります。
Sub Example() Dim rOrgSelect As Range ThisWorkbook.Worksheets(1).Range("A1").Select With ThisWorkbook.Worksheets(1).Range("B1") Set rOrgSelect = Selection .Select .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, _ Formula1:="=A1=1" .FormatConditions(1).Interior.ColorIndex = 46 End With rOrgSelect.Select End Sub
2,6,7,15行目が、Excelのバグを回避のために追加した行です。