PDA

Vollständige Version anzeigen : Zeichen suchen und löschen mit Macro


Gustav Ganz
05.04.2012, 15:05
Hallo zusammen, ich würde gern ein Macro programmieren, das folgendes leistet. Ich habe zwei Spalten (A & B) mit Daten (eine Zeitreihe) in Spalte A steht das Datum und in Spalte B ein entsprechender Wert. Die Zeitreihe bekomme ich wöchentlich und ab und zu kommt es vor, dass in einer Zelle statt einem Wert zum entsprechenden Datum die Zeichenfolge "#N/A N/A" steht. Gerne würde ich die #N/A N/A - Einträge jetzt mit einem Macro durch einen Klick auf einen Button löschen.
Leider reichen meine Excelkenntnisse nicht so weit. Meine Idee war jede Zeile mit WENN-Befehl zu testen und dann die einzelenen WENN-Befehle aneinanderzuhängen aber bei ca. 1000 Zeile ist das nicht so attraktiv. Hat von Euch jemand eine Idee? Vielen Dank!

CitizenX
05.04.2012, 15:20
Hi,

folgendes Makro löscht alle Zeilen in denen dein #N/A N/A steht:

Option Explicit

Sub cleanMe()
On Error GoTo Errexit
With Columns(1) 'deine Spalte in der "#N/A N/A" steht- ggf anpassen
.Replace "#N/A N/A", True
.SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Delete
End With
Exit Sub
Errexit: MsgBox "keine Löschwerte gefunden."
End Sub

Gustav Ganz
05.04.2012, 15:26
Wow! Vielen Dank für die schnelle Antwort... Probiere ich gleich einmal aus!
Gibt es auch die Möglichkeit zu sagen, dass alles was keine Dezimalzahl ist gelöscht werden soll?

CitizenX
05.04.2012, 15:40
Hi,


Option Explicit

Sub cleanMe()
Const lngStartZeile As Long = 2 'deine erste Zeile mit den Löschwerten
Const inSpalte = 1 'deine Spalte mit den Löschwerten

On Error GoTo Errexit
With Cells(lngStartZeile, inSpalte).Resize(Rows.Count - lngStartZeile, 1)
.SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow.Delete 'Textwerte werden gelöscht
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'Leere Zellen werden gelöscht
End With
Exit Sub

Errexit: MsgBox "keine Löschwerte gefunden."
End Sub

Gustav Ganz
05.04.2012, 15:59
Vielen Dank für die schnelle Anwort, allerdings habe ich wahrscheinlich meine Spalte irgendwie falsch angegeben. Wie muss ich das angeben wenn in der Matrix C18:D1000 (Spalte C steht das Datum --> D somit evtl zu manchen Daten der Eintrag #N/A N/A)? Ist es auch möglich in einer größeren Matrix suchen zu lassen also zum Beispiel C18:G1000?

CitizenX
05.04.2012, 16:48
Hi,

Option Explicit

Sub cleanMe()
Dim myRng As Range
Set myRng = Range("C18:G1000")

On Error GoTo Errexit
With myRng
.Replace "#N/A N/A", True 'Zeilen mit "#N/A N/A" werden gelöscht
.SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Delete
'.SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow.Delete 'Textwerte werden gelöscht
End With
Exit Sub

Errexit: MsgBox "keine Löschwerte gefunden."
End Sub


Hinweis: wenn die Zeilen mit #N/A N/A gelöscht werden sollen kannst du die nächste Zeile im Code löschen :.SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow.Delete
wenn alle Text Zeilen gelöscht werden sollen dann lösche diesen Teil:
.Replace "#N/A N/A", True 'Zeilen mit "#N/A N/A" werden gelöscht
.SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Delete
und entferne das führende Hochkomma vor der Codezeile.