如何在VBA中填充单元格中的颜色?
我想给当前工作表中有N/A值的单元格着色。为此,我使用以下宏:如何在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
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