電子書籍の厳選無料作品が豊富!

test1は、A~X列に数字と条件付き書式をセットするマクロですが、途中のセルから色化けします。
原因がお分かりの方はご教授ください。どうもExcel2010のバグのように思われます。
バグならMicrosoftのどこに報告あるいは問い合わせれば良いでしょうか。

Sub test1()
Dim aRow As Long
Dim aCol As Long

With ActiveSheet
For aRow = 1 To 3
For aCol = 1 To 25
.Cells(aRow, aCol).Value = aCol
Call SetFormatConditionOfColor(aRow, aCol, "=1")
Next
Next
End With
End Sub

Public Sub SetFormatConditionOfColor(ByVal aRow As Long, ByVal aCol As Long, ByVal aFormula As String)
With ActiveSheet.Cells(aRow, aCol)
.FormatConditions.Delete

'一致するセル
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:=aFormula
With .FormatConditions(1)
.Font.Color = 0
.Interior.Color = 13434879
End With

'一致しないセル
.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, _
Formula1:=aFormula
With .FormatConditions(2)
.Font.Color = 16777215
.Interior.Color = 16767843
End With
End With

End Sub

OS: MS WindowsXP Professional Service Pack3
Excel: Microsoft Office Professional Plus 2010 14.0.5128.5000(32ビット)

A 回答 (2件)

2010のバグでしょうね。



#ver2007では発生しないようですが
#2007以降の条件付き書式はバグの温床みたいで個人的には鬼門認定してます。:)

同じ処理をするには
Sub test2()
  With ActiveSheet.Range("A1").Resize(3, 25)
    .Formula = "=column()"
    .Value = .Value
    With .FormatConditions
      .Delete
      With .Add(Type:=xlCellValue, Operator:=xlEqual, Formula1:="=1")
        .Font.Color = 0
        .Interior.Color = 13434879
      End With
      With .Add(Type:=xlCellValue, Operator:=xlNotEqual, Formula1:="=1")
        .Font.Color = 16777215
        .Interior.Color = 16767843
      End With
    End With
  End With
End Sub

のように、同条件で範囲をまとめて設定できる場合はできるだけ
まとめて処理してLoop処理を繰り返さないほうが良いでしょうね。
でも、このtest2自体も
Sub tes3()
  Dim i As Long
  For i = 0 To 30
    With ActiveSheet.Range("A1").Resize(3, 25).Offset(i * 3)


と繰り返してしまうと同じ現象が発生してしまいますね。

で、他の事例で通用するかどうかわかりませんが
一旦、Addしてしまった後に、Index指定で設定したほうが良さそう。
Sub SetFormatConditionOfColor(ByVal aRow As Long, _
               ByVal aCol As Long, _
               ByVal aFormula As String)
  With ActiveSheet.Cells(aRow, aCol).FormatConditions
    .Delete
    .Add Type:=xlCellValue, Operator:=xlEqual, Formula1:=aFormula
    .Add Type:=xlCellValue, Operator:=xlNotEqual, Formula1:=aFormula
    With .Item(1)
      .Font.Color = 0
      .Interior.Color = 13434879
    End With
    With .Item(2)
      .Font.Color = 16777215
      .Interior.Color = 16767843
    End With
  End With
End Sub



>バグならMicrosoftのどこに報告あるいは問い合わせれば良いでしょうか。

[マイクロソフト サポート オンライン]
https://support.microsoft.com/oas/default.aspx?& …
参照してください。
>マクロや VBA、Excel ピボットテーブル、サーバー製品との連携機能に関するお問い合わせは、
>無償サポートの対象外となります。
>コミュニティ サイト Microsoft Answers
>または 有償プロフェッショナル サポート をご検討ください。
http://www.microsoft.com/japan/services/support/ …
とあります。

インシデント制ですが、
http://support.microsoft.com/kb/875474/ja
『お客様のお問い合わせの内容が弊社製品の不具合によるものだった場合、インシデントは消費されません。』
だそうです。
私は利用した事がないので、経験談が必要なら他の方のレスを待ってみてください。
    • good
    • 1
この回答へのお礼

詳細なご回答ありがとうございます。
条件付き書式がバグの温床とは初めて知りました。
実際のプログラムではFormulaの部分が"=1"ではなく相対参照を使ったちょっと複雑な数式になっています。
ここで質問した色化けの不具合とは別に、セルをコピーすると相対参照のはずが絶対参照として書式がコピーされてしまうという不具合も生じています。
したがって条件付き書式を使うのは諦めることにしました。レスポンスは落ちますが他の方法を考えることにします。いろいろとありがとうございました。

お礼日時:2011/04/26 14:41

こんにちわ


 
条件付書式をVBAで操作するときは、セルをSelectしないと変になった経験があります。

でも、エクセル2000でしたから参考になるかどうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
問題のプログラムはエクセル2003までは正常に動作することを確認しています。
2007については未確認です。

お礼日時:2011/04/26 14:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!