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

Forumthread: bestimmte Zellinhalte per Makro löschen

bestimmte Zellinhalte per Makro löschen
20.04.2014 10:05:30
Christian
Hallo an alle,
bitte helft mir. Erst einmal frohe Ostern.
Nach Ausführen unten stehenden Makros, bleiben je nach Inhalt, der in Tabelle 1 stand am Ende der Tabelle4 Zeilen übrig, die Text in Spalte B haben, aber Spalte A leer ist. Ist es möglich, dass wenn dies der Fall ist, das Makro diese Texte in Spalte B löscht? In manchen Fällen ist es so, dass zwischen den Zeilen, in denen A und B gefüllt sind und denen in denen nur Spalte B gefüllt ist noch eine Leerzeile ist, genauso wie es sein kann, dass beim Ausführen gar keine Zeile entsteht, die gelöscht werden muss.
Vielen Dank
Christian

Sub Makro1()
' Makro1 Makro
' Tastenkombination: Strg+i
Dim lngLetzte As Long
Dim lngLetzte2 As Long
Dim lngIndex As Long
Dim vntArray As Variant
Dim strText As String
BilderRaus
With ActiveWorkbook.Worksheets("Tabelle1")
.Range("A:A,C:D").Delete Shift:=xlToLeft
With .Columns("A:A")
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
lngLetzte = .Cells.Find(What:="*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
If Application.CountA(Worksheets("Tabelle4").Cells) = 0 Then
lngLetzte2 = 1
Else
lngLetzte2 = Worksheets("Tabelle4").Cells.Find(What:="*", _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End If
.Range(.Cells(1, 1), .Cells(lngLetzte, 1)).Copy _
Worksheets("Tabelle4").Cells(lngLetzte2 + 1, 1)
.Columns(1).Clear
End With
With ActiveWorkbook.Worksheets("Tabelle4")
With .Range(.Cells(lngLetzte2 + 1, 2), _
.Cells(.Cells(.Cells.Rows.Count, 1).End(xlUp).Row, 2)).Font
.Name = "Calibri"
.Size = 11
End With
strText = InputBox("Text für Spalte B:", "Eingabe", "Hier der Text")
If Not strText = vbNullString Then
.Range(.Cells(lngLetzte2 + 1, 2), _
.Cells(.Cells(.Cells.Rows.Count, 1).End(xlUp).Row, 2)) = strText
End If
lngLetzte2 = .Cells.Find(What:="*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
.Range(.Cells(1, 2), .Cells(lngLetzte2, 1)).Sort Key1:=.Range("A1:B1"), _
Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
.Columns("A:A").EntireColumn.AutoFit
.Columns("B:B").EntireColumn.AutoFit
End With
HyperlinkAdressaenderung
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
4x gelesen, 4x Bahnhof ...
20.04.2014 11:02:48
Matthias
Hallo
Kannst Du es bitte einfacher erklären!
Zitat
Nach Ausführen unten stehenden Makros, bleiben je nach Inhalt, der in Tabelle 1 stand am Ende der Tabelle4 Zeilen übrig, die Text in Spalte B haben, aber Spalte A leer ist
Zitat
In manchen Fällen ist es so, dass zwischen den Zeilen, in denen A und B gefüllt sind und denen in denen nur Spalte B gefüllt ist noch eine Leerzeile ist.
Hä? Ich hab gar nix verstanden.
Vielleicht hilft ja schon Filtern nach NichtLeeren Zellen
Gruß Matthias

Anzeige
AW: 4x gelesen, 4x Bahnhof ...
20.04.2014 11:50:51
Christian
Hallo Matthias,
hoffe ich schaffe es einfacher zu erklären,
ganz kurz, das Makro soll als letzten Schritt, dass es ausführt den Inhalt der Zellen in Spalte B löschen, wenn in derselben Zeile die Zelle in Spalte A leer ist.
Und sich dabei nicht davon abbringen lassen, wenn eine Zeile mal zwischendrin ganz leer ist. (kommt maximal 1mal vor).
Ebenso soll kein Fehler auftreten, wenn keine Zeile zum Löschen vorhanden ist.
Sicherlich geht das auch per Filter, aber das Makro wird bis die Tabelle fertig ist, noch ca. 3000mal angewendet. Wäre eine erhebliche Zeitersparnis, wenn das Makro das macht.
Gruß und schonmal vielen Dank
Christian

Anzeige
AW: bestimmte Zellinhalte per Makro löschen
20.04.2014 11:40:34
fcs
Hallo Christian,
versuch es mal mit folgenden Ergänzungen. Das Löschen der Zeilen, die in Spalte A leer sind erfolgt in einer Sub-Prozedur.
Gruß
Franz
'....
Call prcDeleteEmptyRows(Spalte:=1, wks:=ActiveWorkbook.Worksheets("Tabelle4"))
End With
HyperlinkAdressaenderung
End Sub
Sub prcDeleteEmptyRows(Spalte As Long, Optional wks As Worksheet)
'löscht Zeilen wenn Zelle in Spalte Leer oder = "" ist
Dim lngZeile As Long, lngletzte As Long, bolDelete As Boolean, StatusCalc As Long
If wks Is Nothing Then Set wks = ActiveSheet
With Application
.ScreenUpdating = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
End With
With wks
lngletzte = .Cells.Find(What:="*", after:=.Cells(1, 1), SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
For lngZeile = lngletzte To 2 Step -1
If .Cells(lngZeile, 1) = "" Then
.Cells(lngZeile, Spalte).ClearContents
bolDelete = True
End If
Next
If bolDelete = True Then
.Range(.Cells(1, Spalte), _
.Cells(lngletzte, Spalte)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End If
End With
With Application
.ScreenUpdating = True
.Calculation = StatusCalc
.EnableEvents = True
End With
End Sub

Anzeige
AW: bestimmte Zellinhalte per Makro löschen
20.04.2014 12:09:10
Christian
Hallo Franz,
danke erstmal, es funktioniert so gut wie. Du siehst ja dass durch das Sortieren erreicht wird, das die Tabelle in 2 Teile geteilt wird, der Teil, in dem in Spalte A und B etwas steht und der Teil in dem nur in Spalte B etwas steht. (Zeilen in denen nur in Spalte A etwas steht kommen nicht vor).
Folgen die beiden Bereiche direkt aufeinander, funktioniert dein Makro, ist eine Leerzeile dazwischen (und ich habe 0 Ahnung woher die trotz Sortieren kommt, aber es passiert, ich vermute, es hängt vielleicht damit zusammen, dass vorher in genau diesen Fällen ein Zellverbund durch das Makro aufgelöst wurde, ist aber nur eine Vermutung), funktioniert es nicht, die Texte in Spalte B bleiben stehen.
Freue mich, wenn du da mal nochmal schaust. Mehr als eine Leerzeile sinds auf keine Fall, entweder eine oder keine.
Gruß und vielen Dank
Christian

Anzeige
AW: bestimmte Zellinhalte per Makro löschen
20.04.2014 13:12:51
fcs
Hallo Christian,
wo soll ich denn ohne Beispieldatei nachschauen?
Evtl. sind in den fraglichen Zellen ja unsichtbare Zeichen enthalten (Leerzeichen, Zeilenschaltungen etc).
Zum Löschen von Zeilen mit Leerzeichen in Spalte A folgenden Abschnitt des Makros anpassen:
    For lngZeile = lngletzte To 2 Step -1
If Trim(.Cells(lngZeile, 1).Value) = "" Then   'angepasst für Zellen mit Leerzeichen
.Cells(lngZeile, Spalte).ClearContents
bolDelete = True
End If
Next

Gruß
Franz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige