Top-Themen

Aktuelle Themen (A bis Z)

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, 2113 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 ..
Ähnliche Inhalte
Datenbanken
MSACCESS 2010 VBA Update Tabelle.
gelöst Frage von CrashOverDatenbanken6 Kommentare

Hallo an Alle, ich habe hier eine Aufgabe das ich nicht dahinterkomme. Also ich will einen tb update machen ...

Microsoft Office
Exscel Tabelle in Spalten Aufteilen.... VBA
Frage von thomas1972Microsoft Office2 Kommentare

Hallo, ich habe eine Excel Tabelle, welche ich als CSV Datei exportieren möchte. Soweit so gut, nur bekomme ich ...

VB for Applications
Excel VBA HTML-Tabelle auslesen
gelöst Frage von chef1568VB for Applications2 Kommentare

Hallo, ich möchte eine in einer Email eingebundenen HTML-Tabelle auslesen und in einen Array speichern. Hierzu habe ich bereits ...

Microsoft Office
EXCEL VBA Termindaten aus Tabelle Filtern
Frage von t3jxbusMicrosoft Office

Hallo, ich habe hier folgenden Codeblock gefunden für VBA im Excel: Das ganze funktioniert auch soweit super. Ich beschreibe ...

Neue Wissensbeiträge
Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 5 StundenLinux12 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 TagHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 2 TagenMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Heiß diskutierte Inhalte
Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux12 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Windows 10
Alle Programme mit bestimmtem Namen automatisch (per GPO) deinstallieren
gelöst Frage von lordofremixesWindows 1012 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, alle Programme beginnend mit z.B. "Dell" im Namen per Script und somit per ...