如何在VBA中填充单元格中的颜色?

如何在VBA中填充单元格中的颜色?,vba,excel,Vba,Excel,我想给当前工作表中有N/A值的单元格着色。为此,我使用以下宏: Sub ColorCells() Dim Data As Range Dim cell As Range Set currentsheet = ActiveWorkbook.Sheets("Comparison") Set Data = currentsheet.Range("A2:AW1048576") For Each cell In Data If cell.Value = "#N/A" Then cell.Inte

我想给当前工作表中有N/A值的单元格着色。为此,我使用以下宏:

Sub ColorCells()

Dim Data As Range
Dim cell As Range
Set currentsheet = ActiveWorkbook.Sheets("Comparison")
Set Data = currentsheet.Range("A2:AW1048576")

For Each cell In Data
If cell.Value = "#N/A" Then
   cell.Interior.ColorIndex = 3
End If
Next

End Sub
但是如果cell.Value=N/A,则该行会给出一个错误:类型不匹配。也许有人能帮助你了解错误在哪里?感谢非VBA解决方案:

将条件格式规则与公式一起使用:=ISNAA1以突出显示所有错误的单元格-不仅不适用,还应使用=ISERRORA1

VBA解决方案:

你的代码循环通过50百万个单元格。为了减少单元格数量,我使用.SpecialCellsxlCellTypeFormulas,16和.SpecialCellsxlCellTypeConstants,16只返回有错误的单元格。注意,我使用的是If cell.Text=N/A

注意,若要突出显示出现错误的单元格(不适用),请替换以下代码

If Not Data Is Nothing Then
   For Each cell In Data
       If cell.Text = "#N/A" Then
          cell.Interior.ColorIndex = 3
       End If
   Next
End If

UPD:如何通过VBA添加CF规则

Sub test()
    With ActiveWorkbook.Sheets("Comparison").Range("A2:AW" & Rows.Count).FormatConditions
        .Delete
        .Add Type:=xlExpression, Formula1:="=ISNA(A1)"
        .Item(1).Interior.ColorIndex = 3
    End With
End Sub
使用条件格式而不是VBA来突出显示错误

使用像您发布的那样的VBA循环将需要很长时间来处理

如果cell.Value=N/A,则该语句将永远无法工作。如果您坚持使用VBA突出显示错误,请尝试此方法

亚色细胞

Dim Data As Range
Dim cell As Range
Set currentsheet = ActiveWorkbook.Sheets("Comparison")
Set Data = currentsheet.Range("A2:AW1048576")

For Each cell In Data

If IsError(cell.Value) Then
   cell.Interior.ColorIndex = 3
End If
Next

End Sub
准备等待很长一段时间,因为这个过程循环通过5100万个细胞

有更有效的方法来实现你想做的事情。如果你改变主意,更新你的问题

按左上角选择所有单元格 选择[Home]>>[Conditional Formatting]>>[New Rule] 选择[仅格式化包含以下内容的单元格] 在[Format only cells with:]中,选择错误 在[格式..]按钮中选择适当的格式
您需要使用cell.Text=N/A而不是cell.Value=N/A。单元格中的错误实际上只是存储在单元格中的文本。

为什么不使用条件格式来突出显示有错误的单元格?如果不喜欢,请使用If cell.Text=N/A。还有一个提示,尝试使用Set Data=Intersectcurrentsheet.UsedRange,currentsheet.RangeA2:AW1048576来最小化循环中的单元格计数。现在,您可以循环使用5000万个单元格:您还可以使用IsErrorCell.value代替。value use.text谢谢!这两种方法都很好用!VBA的唯一问题是,如果需要使用另一个输入运行宏,并且N/A单元格的位置发生变化,则此宏不会重写颜色。例如,如果A2单元格已上色,则即使第二次尝试时没有N/A值,它仍保持上色。@Ale,在这种情况下,请在错误恢复之前添加行currentsheet.RangeA2:AW&Rows.Count.Interior.Color=xlNone下一步请参见我的更新答案可能是列必须始终用灰色上色,但B列包含一些值和N/A,用红色表示。包含N/A的单元格取决于输入文件和另一个宏。所以,如果N/A位置发生变化,我必须清除上次的红色,但仍保留灰色列。但在这种情况下,最好使用CF。谢谢@Ale,请参阅我关于如何通过VBA创建CF规则的更新部分:谢谢,它工作得很好!但后来我实际上录制了一个执行CF的宏,因此VBA自动创建了命令:谢谢你!事实上,我在寻找VBA解决方案,但效果不错。
Sub test()
    With ActiveWorkbook.Sheets("Comparison").Range("A2:AW" & Rows.Count).FormatConditions
        .Delete
        .Add Type:=xlExpression, Formula1:="=ISNA(A1)"
        .Item(1).Interior.ColorIndex = 3
    End With
End Sub
Dim Data As Range
Dim cell As Range
Set currentsheet = ActiveWorkbook.Sheets("Comparison")
Set Data = currentsheet.Range("A2:AW1048576")

For Each cell In Data

If IsError(cell.Value) Then
   cell.Interior.ColorIndex = 3
End If
Next

End Sub