Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1356to1360
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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

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

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige