Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBA - Sämtliche Leerzeilen in Tabelle löschen

Frage Entwicklung VB for Applications

Mitglied: 106543

106543 (Level 2)

10.12.2013, aktualisiert 11:34 Uhr, 1918 Aufrufe, 6 Kommentare

Hallo,

ich hab mal wieder ein kleineres Problem, bei dem meine Syntax anscheinend irgendwie nicht funktioniert wie ich mir das denke -.-
Mal seh´n, was ihr hier beitragen könnt/wollt :D
Ich habe eine Tabelle in der Leerzeilen vorhanden sind, z.B.
01.
                   A                             B                           C 
02.
1)     Hier steht etwas Text     Hier steht eine Zahl      Hier steht ein Datum 
03.
2)     Hier steht etwas Text     Hier steht eine Zahl      Hier steht ein Datum 
04.
3) 
05.
4)     Hier steht etwas Text     Hier steht eine Zahl      Hier steht ein Datum 
06.
5) 
07.
6) 
08.
7)     Hier steht etwas Text     Hier steht eine Zahl      Hier steht ein Datum 
09.
8) 
10.
9)     Hier steht etwas Text     Hier steht eine Zahl      Hier steht ein Datum 
11.
10)     Hier steht etwas Text     Hier steht eine Zahl      Hier steht ein Datum
um das mal stümperhaft abzubilden.
was ich mir jetzt dachte, war, dass ich alle Zeile von 1000 aufwärts abgehe, gucke ob in der Zelle A/entsprechende Zahl ein Wert steht, wenn nicht soll die Zeile gelöscht werden
das ist was ich zustande gebracht habe...
01.
Dim sLetzte As String 
02.
sLetzte = Range("A" & Range("A65536").End(xlUp).Column) 
03.
For i = 1000 To 2 Step -1 
04.
    If ActiveWorkbook.ActiveSheet.Cells(i, sLetzte).Value = "" Then 
05.
        Rows(i).EntireRow.Delete 
06.
    End If 
07.
Next
ich blicke bei dem Code nicht mehr durch :D
vielleicht hat ja jemand von euch ein kleines Schnipselchen für mich, was schnell mal läuft...

Grüße
Exze
Mitglied: colinardo
LÖSUNG 10.12.2013, aktualisiert um 11:55 Uhr
Hallo Exce,
das Problem was du hast ist folgendes: Bei jedem Durchlauf der Schleife löschst du eine Zeile aus dem Workbook, d.h. nach jedem Durchlauf stimmt die Zeilennummer nicht mehr da du ja gerade eine Zeile gelöscht hast.
Du machst es nun folgendermaßen: Du iterierst über die Zellen und fügst sie zu einer MultiSelection hinzu, und erst nach dem Durchlauf aller Zellen löschst du die Multi-Selection.
01.
Sub delEmptyRows() 
02.
    Dim rngCells As Range, cell As Range, rngCombined As Range, sheet as Worksheet 
03.
    ' Hier das gewünschte Tabellenblatt angeben 
04.
    set sheet = Worksheets(1) 
05.
    Set rngCells = sheet.Range("A1", sheet.Range("A65535").End(xlUp)) 
06.
    For Each cell In rngCells 
07.
        If cell.Value = "" Then 
08.
            If rngCombined Is Nothing Then 
09.
                Set rngCombined = cell.EntireRow 
10.
            End If 
11.
            Set rngCombined = Union(rngCombined, cell.EntireRow) 
12.
        End If 
13.
    Next 
14.
    If Not rngCombined Is Nothing Then 
15.
        rngCombined.Delete 
16.
    End If 
17.
End Sub
Grüße Uwe
Bitte warten ..
Mitglied: 106543
10.12.2013 um 11:34 Uhr
Hi Uwe,

danke für deine Hilfe. Funktioniert natürlich alles wie es soll :D
daran zu denken, dass ich die Zeilen erst am Ende lösche, hab ich leider nicht gedacht und genau da war ich auch vorhin gehangen.

Vielen Dank und Grüße
Exze
Bitte warten ..
Mitglied: colinardo
LÖSUNG 10.12.2013, aktualisiert um 11:40 Uhr
-edit- hab grad noch einen Check für den Fall das keine Leerzeilen vorhanden sind hinzugefügt...
Grüße Uwe
Bitte warten ..
Mitglied: 106543
10.12.2013 um 11:43 Uhr
Noch eine kurze Frage:
Der Code wird immer fur das aktive Workbook bzw. das aktive Worksheet ausgeführt oder ?

Grüße
Exze
Bitte warten ..
Mitglied: colinardo
LÖSUNG 10.12.2013, aktualisiert um 12:00 Uhr
Zitat von 106543:

Noch eine kurze Frage:
Der Code wird immer fur das aktive Workbook bzw. das aktive Worksheet ausgeführt oder ?
Ja, obiger Code läuft nur im Code eines Tabellenblattes, wenn das nicht gewünscht ist lässt es sich aber einfach anpassen, hierzu passt du in folgendem Code einfach das Sheet in Zeile 3 an, in Zeile 4 werden dann die Ranges entsprechend referenziert, und der Code läuft dann auch in anderen Modulen.
01.
Sub delEmptyRows() 
02.
    Dim rngCells As Range, cell As Range, rngCombined As Range, sheet as Worksheet 
03.
    set sheet = Worksheets(1) 
04.
    Set rngCells = sheet.Range("A1", sheet.Range("A65535").End(xlUp)) 
05.
    For Each cell In rngCells 
06.
        If cell.Value = "" Then 
07.
            If rngCombined Is Nothing Then 
08.
                Set rngCombined = cell.EntireRow 
09.
            End If 
10.
            Set rngCombined = Union(rngCombined, cell.EntireRow) 
11.
        End If 
12.
    Next 
13.
    If Not rngCombined Is Nothing Then 
14.
        rngCombined.Delete 
15.
    End If 
16.
End Sub
p.s. werde den Code oben ergänzen.
Bitte warten ..
Mitglied: 106543
10.12.2013 um 12:00 Uhr
Jo danke, aber dann passt die einfache Variante ich aktiviere dann nacheinander die 3 Workbooks und lasse deinen Code dann drüber laufen.

Nochmal danke und Grüße
Exze
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
EXCEL VBA Termindaten aus Tabelle Filtern

Frage von t3jxbus zum Thema Microsoft Office ...

VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA .csv Import in Tabelle x, ab Spalte y

Frage von drimrim zum Thema VB for Applications ...

Microsoft Office
gelöst Excel 2013 Duplikate löschen und Startzeile ermitteln VBA (5)

Frage von AlexIOT zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...