Zeilen und Spalten mit VBA ausblenden

18/07/2008 - 00:11 von Thomas Mangold | Report spam
Hallo,

ich lasse in einem komplexen Dokument mit folgendem Code alle Spalten
ausblenden, die kein X in der ersten Zeile stehen haben:

For Each cell In Range(Cells(1, 2), Cells(1, 256))
If UCase(cell.Value) = "X" Then
cell.EntireColumn.Hidden = False
Else: cell.EntireColumn.Hidden = True
End If
Next cell


Analog gehe ich mit den Zeilen vor, ich lasse alle Zeilen ausblenden,
deren Element in der ersten Spalte kein X hat:
.
cell.EntireRow.Hidden = False
.

Das funktioniert. Allerdings sehr langsam. Gibt es eine Möglichkeit,
dies zu beschleunigen.

Eine Idee wàre, die Spalten zu merken, die ausgeblendet werden sollen
und dann alle auf einmal ausblenden. Nur geht bei
ActiveSheet.Columns(Spalte).Hidden = False
darf Spalte nur einen zusammenhàngenden Bereich umfassen.

Gruß
Thomas
 

Lesen sie die antworten

#1 Claus Busch
18/07/2008 - 01:45 | Warnen spam
Hallo Thomas,

Am Fri, 18 Jul 2008 00:11:44 +0200 schrieb Thomas Mangold:

ich lasse in einem komplexen Dokument mit folgendem Code alle Spalten
ausblenden, die kein X in der ersten Zeile stehen haben:

For Each cell In Range(Cells(1, 2), Cells(1, 256))
If UCase(cell.Value) = "X" Then
cell.EntireColumn.Hidden = False
Else: cell.EntireColumn.Hidden = True
End If
Next cell

Analog gehe ich mit den Zeilen vor, ich lasse alle Zeilen ausblenden,
deren Element in der ersten Spalte kein X hat:
.
cell.EntireRow.Hidden = False
.

Das funktioniert. Allerdings sehr langsam. Gibt es eine Möglichkeit,
dies zu beschleunigen.



wenn du über sàmtliche Spalten und Zeilen diese Überprüfung nach "X"
laufen làßt, ist das logischerweise langsam. Wenn deine Tabelle in Zeile
2 lückenlos ausgefüllt ist, dann lass dir doch die letzte belegte Spalte
geben und prüfe nur von Spalte 2 bis zur letzten. Analog könntest du das
auch mit den Zeilen machen, aber noch schneller wàre es, wenn du die
Spalte A nach x filtern würdest.
Ausblenden errechnet in Zeile 2 die letzte belegte Spalte und in Spalte
2 die letzte belegte Zeile (Das musst du noch deiner Tabelle
entsprechend anpassen). Ausblenden2 filtert Spalte A nach x:

Sub Ausblenden()

Dim LRow As Long
Dim LCol As Integer
Dim rngZelle As Range

Application.ScreenUpdating = False
With ActiveSheet
LRow = .Cells(Rows.Count, 2).End(xlUp).Row
LCol = .Cells(2, Columns.Count).End(xlToLeft).Column

For Each rngZelle In Range(Cells(1, 2), Cells(1, LCol))
If UCase(rngZelle.Value) <> "X" Then
rngZelle.EntireColumn.Hidden = True
End If
Next

For Each rngZelle In Range("A2:A" & LRow)
If UCase(rngZelle.Value) <> "X" Then
rngZelle.EntireRow.Hidden = True
End If
Next
End With
Application.ScreenUpdating = True

End Sub

Sub Ausblenden2()

Dim LCol As Integer
Dim rngZelle As Range

Application.ScreenUpdating = False
With ActiveSheet
LCol = .Cells(2, Columns.Count).End(xlToLeft).Column

For Each rngZelle In Range(Cells(1, 2), Cells(1, LCol))
If UCase(rngZelle.Value) <> "X" Then
rngZelle.EntireColumn.Hidden = True
End If
Next

.Range("$A$1").AutoFilter Field:=1, Criteria1:="=x"
End With
Application.ScreenUpdating = True

End Sub


Mit freundlichen Grüssen
Claus Busch
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate

Ähnliche fragen