Ich möchte Zellen mit "# N/A" -Wert in der aktuellen Tabelle einfärben. Dazu verwende ich folgendes Makro:
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
Die Zeile If cell.Value = "#N/A" Then
gibt jedoch einen Fehler aus: Typenkonflikt. Vielleicht kann jemand helfen zu verstehen, wo der Fehler liegt? Vielen Dank
Nicht-VBA-Lösung:
Bedingte Formatierungsregel mit der Formel verwenden: =ISNA(A1)
(zum Hervorheben von Zellen mit all errors - nicht nur #N/A
, verwenden Sie =ISERROR(A1)
)
VBA-Lösung:
Ihr Code durchläuft 50 mln Zellen. Um die Anzahl der Zellen zu reduzieren, verwende ich .SpecialCells(xlCellTypeFormulas, 16)
und .SpecialCells(xlCellTypeConstants, 16)
, um nur fehlerhafte Zellen zurückzugeben (Hinweis: Ich verwende If cell.Text = "#N/A" Then
).
Sub ColorCells()
Dim Data As Range, Data2 As Range, cell As Range
Dim currentsheet As Worksheet
Set currentsheet = ActiveWorkbook.Sheets("Comparison")
With currentsheet.Range("A2:AW" & Rows.Count)
.Interior.Color = xlNone
On Error Resume Next
'select only cells with errors
Set Data = .SpecialCells(xlCellTypeFormulas, 16)
Set Data2 = .SpecialCells(xlCellTypeConstants, 16)
On Error GoTo 0
End With
If Not Data2 Is Nothing Then
If Not Data Is Nothing Then
Set Data = Union(Data, Data2)
Else
Set Data = Data2
End If
End If
If Not Data Is Nothing Then
For Each cell In Data
If cell.Text = "#N/A" Then
cell.Interior.ColorIndex = 4
End If
Next
End If
End Sub
Hinweis , um Zellen mit Fehlern (nicht nur "#N/A"
) hervorzuheben, ersetzen Sie den folgenden Code
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
mit
If Not Data Is Nothing Then Data.Interior.ColorIndex = 3
UPD: (wie man eine CF-Regel über VBA hinzufügt)
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
Verwenden Sie die bedingte Formatierung anstelle von VBA, um Fehler hervorzuheben.
Wenn Sie eine VBA-Schleife wie die von Ihnen gepostete verwenden, dauert die Verarbeitung sehr lange
die Anweisung If cell.Value = "#N/A" Then
wird niemals funktionieren. Wenn Sie darauf bestehen, VBA zum Hervorheben von Fehlern zu verwenden, versuchen Sie es stattdessen.
Unterfarbzellen ()
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
Seien Sie auf eine lange Wartezeit vorbereitet, da die Prozedur 51 Millionen Zellen durchläuft
Es gibt effizientere Wege, um das zu erreichen, was Sie wollen. Aktualisieren Sie Ihre Frage, wenn Sie einen Sinneswandel haben.
Sie müssen cell.Text = "# N/A" anstelle von cell.Value = "# N/A" verwenden. Der Fehler in der Zelle ist eigentlich nur Text, der in der Zelle gespeichert ist.