Makro zur Automatisierung des Ausblendens von Leerzeilen?

  • #1
A

Ace_NoOne

Bekanntes Mitglied
Themenersteller
Dabei seit
07.04.2002
Beiträge
403
Reaktionspunkte
0
Ort
Germany
Hallo zusammen,

ich arbeite an einer Excel-Tabelle mit ca. 1500 Zeilen und 28 Spalten. Beim Ausdrucken sind jedoch nicht immer alle Spalten und Zeilen notwendig, also möchte ich diese ausblenden. Für die Spalten ist das kein Problem - aber bei den Zeilen ist das doch sehr viel Kleinarbeit, da nur die Zeilen ausgeblendet werden sollen, die in einer bestimmten Spalte keinen Wert haben (dort also leer sind).
Gibt es eine Möglichkeit, wie ich diesen Vorgang des Ausblendens der->Leerzeilen' (sie sind ja nicht wirklich komplett leer, eben nur in der jeweils betroffenen Spalte) automatisieren kann?
Könnte man das vielleicht mit einem Makro lösen - etwas in der Art IF([Wert von Zelle i|[Spalte]] == NULL) THEN [Ausblenden]? Leider kenne ich mich mit der Makro-Programmierung überhaupt nicht aus und weiß deshalb auch nicht, wie ich an die Sache rangehen soll.

Im Voraus vielen Dank!


UPDATE:
Durch das Studieren aufgezeichneter Makros konnte ich mir doch ein gewisses Verständnis der Funktionsweise von Makros aneignen. Somit bin ich zu diesem Code gekommen:

Code:
Sub ausblenden()
'
' blendet Zeilen aus, die in einer
' bestimmten Spalte keinen Wert haben
'
    Spalte = C
    Zeilen = InputBox(Bitte die Anzahl der Zeilen angeben., Zeilenanzahl angeben)
    Resultat = 0
    For i = 1 To Zeilen
        Zelle = Spalte & i
        Range(Zelle).Select
        If ActiveCell.Value =  Then
            Rows(i).Select
            Hinweis = MsgBox(Zeile  & i &  wird ausgeblendet., Title:=Zeile ausblenden)-> nur zum Testen
            Selection.EntireRow.Hidden = True
            Resultat = Resultat + 1
        End If
    Next i
    Hinweis = MsgBox(Resultat &  Zeilen wurden ausgeblendet., Title:=Resultat)

End Sub

Ist das soweit okay? Es funktioniert zwar an meinem Testbeispiel, aber ich will kein Risiko eingehen (bei der->richtigen' Tabelle würden Fehler kaum entdeckt, was fatal enden könnte). Und vielleicht hat ja jemand noch Verbesserungsvorschläge (schließlich waren das meine ersten Schritte in Visual Basic)!?
 
  • #2
[edit]
Da war ich ja völlig daneben mit meinem Eintrag. Keine Ahnung, was ich da gelesen habe. :(
[/edit]
 
  • #3
Hi Ace_NoOne,

im Prinzip ist das für den Anfang schon ganz gut :D

Ich häng dir mal meine Version an. Schau Sie dir mal an.
Wenn Du Erklärungen brauchst melde dich.

Gruß Matjes :)

Code:
Option Explicit
Sub AusblendenZeileWennZelleOhneInhalt()
  
 ->SpalteNr der Spalte, bei der die Zelle in der letzten
 ->Zeile immer gefüllt ist (z.B. Spalte ID oder lfdNr)
  Const c_Spalte_id = 1
 ->SpalteNr der Spalte mit dem Ausblendekriterium
  Const c_Spalte_Ausblenden = 3->entspricht C
 ->erste Zeile nach der überschrift
  Const c_ersteZeileNachUeberschrift = 2
  Dim z As Long, l_AnzZeilen As Long, ws As Worksheet
  
  Set ws = ActiveSheet
  
 ->Bildschirmupdate abschalten
  Application.ScreenUpdating = False
  
 ->Zeilenanzahl feststellen,
  l_AnzZeilen = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
  
  For z = c_ersteZeileNachUeberschrift To l_AnzZeilen
    If ws.Cells(z, c_Spalte_Ausblenden).Value =  Then
      ws.Rows(z).Hidden = True
    End If
  Next
  
 ->Bildschirmupdate anschalten
  Application.ScreenUpdating = False
  
  Set ws = Nothing
End Sub

Sub EinblendenAlleAusgeblendetenZeilen()
  ActiveSheet.Cells.EntireRow.Hidden = False
End Sub
 
  • #4
Erstmal danke für die Antworten!

Klexy: *lol* ;) Aber ganz so verkehrt warst du eigentlich nicht - der Link war durchaus hilfreich (wenn auch eher für mein )! :)

Matjes: Vielen Dank!! (ein kleiner Fehler ist aber drin: Application.ScreenUpdating = False müsste True sein am Ende... :) )
 
  • #5
Hi Ace_NoOne,

:D das ist vollkommen richtig - ist wohl beim Kopieren passiert.

Leider kenne ich mich mit der Makro-Programmierung überhaupt nicht aus und weiß deshalb auch nicht, wie ich an die Sache rangehen soll.
Einfach mit kleinen Problemen anfangen und wenn Du nicht weiterkommst fragen.

So wie du das gemacht hast, Makro aufzeichnen und für die eigenen Belange modifizieren, bist Du shon auf dem richtigen Weg. So lernst Du nach und nach, was du mit den einzelnen Objekten machen kannst.

Das Objekt-Modell ist in der VB-Excel-Hilfe erklärt - am Anfang vielleicht nicht ganz einfach zu verstehen.
- Objekte haben Eigenschaften, die man lesen und in den meisten Fällen setzen kann (z.B. Hidden = True).
- Objekte haben Methoden, die auf sie anwendbar sind. (z.B. Worksheets.Add)

Neben dem Objekt-Modell gibt es die Programmierkonstrukte, wie Sub, Function, Schleifen (For , For Each, do, ...), Verzweigungen (If Then Else, Select Case).

Ein weiterer Punkt sind Variable, deren Deklarationen (Dim, ...) und Typdefinition(Integer, String, Long, ...)

So, das sollte als Überblick erstmal reichen ;D

An die einzelnen Informationen kommt man am schnellsten, wenn man im VB-Editor in einem Code-Fenster das->Reizwort' (z.B. Worksheet) eintippt, markiert und F1 drückt. Dann geht das entsprechende Hilfefenster auf.

Gruß Matjes :)


korrigierter Makro:
Code:
Option Explicit
Sub AusblendenZeileWennZelleOhneInhalt()
  
 ->SpalteNr der Spalte, bei der die Zelle in der letzten
 ->Zeile immer gefüllt ist (z.B. Spalte ID oder lfdNr)
  Const c_Spalte_id = 1
 ->SpalteNr der Spalte mit dem Ausblendekriterium
  Const c_Spalte_Ausblenden = 3->entspricht C
 ->erste Zeile nach der überschrift
  Const c_ersteZeileNachUeberschrift = 2
  Dim z As Long, l_AnzZeilen As Long, ws As Worksheet
  
  Set ws = ActiveSheet
  
 ->Bildschirmupdate abschalten
  Application.ScreenUpdating = False
  
 ->Zeilenanzahl feststellen,
  l_AnzZeilen = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
  
  For z = c_ersteZeileNachUeberschrift To l_AnzZeilen
    If ws.Cells(z, c_Spalte_Ausblenden).Value =  Then
      ws.Rows(z).Hidden = True
    End If
  Next
  
 ->Bildschirmupdate anschalten
  Application.ScreenUpdating = True
  
  Set ws = Nothing
End Sub

Sub EinblendenAlleAusgeblendetenZeilen()
  ActiveSheet.Cells.EntireRow.Hidden = False
End Sub
 
Thema:

Makro zur Automatisierung des Ausblendens von Leerzeilen?

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.966
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben