Ich arbeite mit Daten, die aus einer NOSQL-Datenbank importiert werden.
Manchmal erhalte ich Arbeitsblätter mit 1.000 Spalten und mehr, bei denen die meisten Zellen keine Daten enthalten.
Ich suche nach einer Möglichkeit, bei der beim Filtern der Daten und Anzeigen nur bestimmter Zeilen alle Spalten der sichtbaren Zeilen, die überhaupt keine Daten enthalten, automatisch ausgeblendet werden.
Auf diese Weise muss ich auf der Suche nach Informationen nicht horizontal durch Hunderte von leeren Spalten scrollen.
Wenn Sie eine Lösung für dieses Problem haben, wäre ich dankbar.
Danke,
Hanan Cohen
Antwort1
Dieser Code blendet Spalten aus, wenn nur die Kopfzelle ausgefüllt ist:
Sub KolumnHider()
Dim wf As WorksheetFunction
Dim i As Long, r As Range
Set wf = Application.WorksheetFunction
For i = 1 To 1000
Set r = Cells(1, i).EntireColumn
If wf.CountA(r) < 2 Then r.Hidden = True
Next i
End Sub
Wenn keine Spaltenüberschriften vorhanden sind, dann machen Sie die2in ein1.
Antwort2
Dieser VBA-Code blendet alle leeren Spalten aus, unabhängig davon, ob sie eine Kopfzeile haben oder nicht.
Private Sub CommandButton1_Click()
Dim rng As Range
Dim nLastRow As Long
Dim nLastColumn As Integer
Dim i As Integer
Dim HideIt As Boolean
Dim j As Long
Set rng = ActiveSheet.UsedRange
nLastRow = rng.Rows.Count + rng.Row - 1
nLastColumn = rng.Columns.Count + rng.Column - 1
For i = 1 To nLastColumn
HideIt = True
For j = 2 To nLastRow
If Cells(j, i).Value <> "" Then
HideIt = False
End If
Next
If HideIt = True Then
Columns(i).EntireColumn.Hidden = True
End If
Next
End Sub
Anmerkungen:
Wenn Sie zum Filtern der Datensätze einen Standardfilterbefehl aus dem Menü verwenden , führen Sie zuerst diesen Code aus und filtern Sie dann.- Wenn Sie VBA-Code zum Filtern der Datensätze verwenden, rufen Sie diese Subroutine zuerst in Ihrem Code auf. In diesem Fall wäre es besser, „CommandButton1_Click“ durch einen anderen Namen zu ersetzen, beispielsweise „Private Sub HideBlankColumn()“.
Antwort3
Ich habe den Rajesh S-Code geändert, um angewendete Filter zu berücksichtigen, die interne Schleife so schnell wie möglich zu verlassen und Spalten einzublenden, wenn angewendete Filter die sichtbaren Zeilen ändern. Führen Sie HydeEmptyColumns nach dem Filtern aus.
Public Sub HydeEmptyColumns()
Dim rng As Range
Dim nLastRow As Long
Dim nLastColumn As Integer
Dim i As Integer
Dim HideIt As Boolean
Dim j As Long
Set rng = ActiveSheet.UsedRange
nLastRow = rng.Rows.Count + rng.row - 1
nLastColumn = rng.Columns.Count + rng.Column - 1
For i = 1 To nLastColumn
HideIt = True
For j = 2 To nLastRow
If Not Rows(j).Hidden Then
If Cells(j, i).Value <> "" Then
HideIt = False
Exit For
End If
End If
Next
Columns(i).EntireColumn.Hidden = HideIt
Next
End Sub