月別アーカイブ
検索

ある案件で、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のバグを回避のために追加した行です。

関係ありそうな記事

コメント