Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA prüfen ob Zelle #NAME? enthält

VBA prüfen ob Zelle #NAME? enthält
15.08.2022 14:19:55
Florian
HI Leute,
ich will in meiner Schleife prüfen, ob eine Zelle den Eintrag #NAME? enthält und diese Zeile dann löschen. Leider funktionieren alle getesteten Varianten irgendwie nicht.
Das habe ich versucht:

For lngZeile = lngLetzteZeile To 2 Step -1
If wks.Cells(lngZeile, 1).HasFormula = True Or _
wks.Cells(lngZeile, 1).Text = "#NAME?" Or _
wks.Cells(lngZeile, 1).Text = "[#]NAME[?]" Then
wks.Rows(lngZeile).Delete shift:=xlUp
End If
Next lngZeile
Kann jemand helfen?
Danke Euch!
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA prüfen ob Zelle #NAME? enthält
15.08.2022 14:43:54
ReginaR
Hi, prüfe so:

if wks.Cells(lngZeile, 1).Value = CVErr(xlErrName) Then
' Löschen
end if
Gruß Regina
AW: VBA prüfen ob Zelle #NAME? enthält
15.08.2022 14:49:47
Daniel
HI
setze mal den Cursor auf so eine Zelle mit dem Fehler und gib im Direktfenster ?Selection.Text ein.
Das was dann angezeigt wird, solltest du im Code verwenden, für den Vergleich mit "="
die klammern [] brauchst du, wenn du statt "=" mit LIKE vergleichst, weil bei LIKE das # der Joker für Ziffern und das ? der Joker für ein beliebiges Zeichen ist.
mit den [] macht man sie dann zu normalen Zeichen.
das .HasFormula mit OR einzubinden ist hier kontraproduktiv, denn damit löschst du dir alle Zeilen, die eine Formel haben.
Gruß Daniel
Anzeige
AW: VBA prüfen ob Zelle #NAME? enthält
15.08.2022 14:58:44
Florian
Crazy. Habe das gerade getestet.
Das Ergebnis war

####
Lag daran, weil die Spalte nicht breit genug war.
Jetzt läuft es auch mit diesem Code:

wks.Cells(lngZeile, 1).Text = "#NAME?" 
Das soll mal einer verstehen :D
Anzeige
AW: VBA prüfen ob Zelle #NAME? enthält
15.08.2022 15:39:53
Daniel
.Text ist der Zellwert, so wie er dir auf dem Bildschirm angezeigt wird.
das berücksichtig nicht nur das Zahlenformat, sondern auch die Spaltenbreite.
wenn du davon unabhängig sein willst, dann probiers mal mit

CStr(wks.Cells(lngZeile, 1).Value)= "Fehler 2029"
.Value ist der unformatierte Zellwert.
mit CStr machst du ihn dann selber zu einem Text, da der reine Fehlerwert wie ihn .Value zurückgibt sonst problematisch in der weiterverarbeitung ist.
aber bitte vorher selber prüfen, welches der genaue Text ist, den du brauchst.
Gruß Daniel
Anzeige
AW: VBA prüfen ob Zelle #NAME? enthält
15.08.2022 17:20:58
Florian
Ok verstehe. Vielen Dank! :)
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA zur Prüfung von Zellen mit #NAME? Fehler


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu: Klicke im Projektfenster mit der rechten Maustaste auf dein Projekt und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Sub RemoveNameErrors()
       Dim lngZeile As Long
       Dim lngLetzteZeile As Long
       Dim wks As Worksheet
    
       Set wks = ThisWorkbook.Sheets("DeinBlattname")
       lngLetzteZeile = wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
    
       For lngZeile = lngLetzteZeile To 2 Step -1
           If wks.Cells(lngZeile, 1).Value = CVErr(xlErrName) Then
               wks.Rows(lngZeile).Delete shift:=xlUp
           End If
       Next lngZeile
    End Sub
  4. Ändere "DeinBlattname": Ersetze den Platzhalter durch den Namen deines Arbeitsblatts.
  5. Führe das Makro aus: Drücke F5 oder gehe zu Run > Run Sub/UserForm.

Häufige Fehler und Lösungen

  • Error #NAME? wird nicht erkannt: Überprüfe, ob die Zelle tatsächlich den Fehlerwert enthält und nicht einen Text, der wie ein Fehler aussieht.
  • Zellen werden nicht gelöscht: Stelle sicher, dass die Schleife von der letzten Zeile zur ersten geht, um das Löschen von Zeilen korrekt zu verarbeiten.
  • Unzureichender Zellinhalt: Wenn der Zellinhalt nicht breit genug ist, kann Excel den Fehler möglicherweise nicht richtig anzeigen. Stelle die Spaltenbreite sicher.

Alternative Methoden

Eine weitere Möglichkeit, um Zellen mit dem Fehler #NAME? zu identifizieren, besteht darin, die .Text-Eigenschaft anstelle von .Value zu verwenden. Beispiel:

If wks.Cells(lngZeile, 1).Text = "#NAME?" Then
    wks.Rows(lngZeile).Delete shift:=xlUp
End If

Beachte jedoch, dass dies von der Formatierung der Zelle abhängt.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du mit Fehlern in Zellen umgehen kannst:

  1. Löschen aller Fehler in einer bestimmten Spalte:

    Sub DeleteErrorsInColumn()
       Dim lngZeile As Long
       Dim lngLetzteZeile As Long
       Set wks = ThisWorkbook.Sheets("DeinBlattname")
       lngLetzteZeile = wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
    
       For lngZeile = lngLetzteZeile To 1 Step -1
           If IsError(wks.Cells(lngZeile, 1)) Then
               wks.Rows(lngZeile).Delete shift:=xlUp
           End If
       Next lngZeile
    End Sub
  2. Fehler in einem Array speichern:

    Dim errorCells As Collection
    Set errorCells = New Collection
    
    For lngZeile = 1 To lngLetzteZeile
       If wks.Cells(lngZeile, 1).Value = CVErr(xlErrName) Then
           errorCells.Add wks.Cells(lngZeile, 1).Address
       End If
    Next lngZeile

Tipps für Profis

  • Direktfenster nutzen: Wenn Du auf eine Zelle mit einem Fehler klickst und im Direktfenster ?Selection.Text eingibst, siehst Du, wie der Fehler genau angezeigt wird. Dies kann nützlich sein, um den Vergleich im Code präzise zu gestalten.
  • Fehlerbehandlung aktivieren: Nutze On Error Resume Next, um Fehler im Code zu ignorieren, wenn Du mit vielen Daten arbeitest.
  • Debugging: Verwende Debug.Print innerhalb der Schleife, um zu sehen, welche Zellen überprüft werden.

FAQ: Häufige Fragen

1. Wie kann ich alle Fehler in mehreren Spalten gleichzeitig löschen? Du kannst die Schleife so anpassen, dass sie mehrere Spalten überprüft und die Zeile löscht, wenn ein Fehler gefunden wird.

2. Was passiert, wenn ich .HasFormula verwende? Wenn Du .HasFormula verwendest, löscht Du auch Zeilen mit Formeln, die möglicherweise keine Fehler sind. Dies könnte zu Datenverlust führen.

3. Wie kann ich sicherstellen, dass ich die richtige Zellreferenz verwende? Verwende CStr() um den Wert in einen String zu konvertieren und vergleiche diesen mit dem erwarteten Wert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige