2016-07-12 26 views
0

enter image description here Ich versuche, eine VBA zu erstellen, die prüfen wird, ob eine Spalte alle Werte als "Null" (String-Wert) nicht leer oder leer hat, wenn es " Null "String value" löscht die gesamte Spalte. Ich kann For-Schleife verwenden, um alle Werte in Zellen zu durchlaufen, aber es ist zeitaufwendig. Ich suche nach einer Option, um AutoFilter oder Find-Befehl zu verwenden. Irgendwelche Vorschläge würden geschätzt. Danke.VBA löschen Excel-Spalte, wenn gesamte Spalte Daten ist "Null"

Antwort

0

So etwas wie

Dim col as Range 
For Each col In UsedRange.Columns 
    If col.Find("*") Is Nothing Then 
     col.EntireColumn.Delete 
    End If 
Next 

aktualisieren

Ich glaube nicht, können Sie mit "Null" Zellenwerte in Excel haben. Ich habe versucht, diese

Dim cell As Range 
Set cell = Range("A1") 
cell.Value = ""  ' cell.Value2 shows as "Empty" in the Locals window 
cell.Value = Empty ' cell.Value2 still "Empty" 
cell.Value = Nothing ' this gives "Run-time error '1004': Application-defined or object-defined Error" 

Update 2

Ein weiterer langsamer Weg

Dim col as Range, blanks as Range 
For Each col In UsedRange.Columns 
    Set blanks = col.SpecialCells(xlCellTypeBlanks) ' gives error if no blank cells in the col range 
    If blanks.Cells.Count = col.Cells.Count Then 
     col.EntireColumn.Delete 
    End If 
Next 

Update 3

alle leeren Zellen in der Spalte zu finden sein können Sie WorksheetFunction.CountIf(col, "Null") verwenden können um die Anzahl der "Null" -Zellen zu zählen

Dim col As Range 
For Each col In UsedRange.Columns 
    'NullCount = WorksheetFunction.CountIf(col, "Null") 
    'NotNullCount = WorksheetFunction.CountIf(col, "<>Null") 
    'blanksCount = WorksheetFunction.CountBlank(col) 
    'nonBlanksCount = WorksheetFunction.CountA(col) 
    With WorksheetFunction 
     If .CountA(col) = .CountIf(col, "Null") + 1 Then ' 1 for the column header cell 
      col.EntireColumn.Delete 
     End If 
    End With 
Next 
+0

Slai, danke für deine Antwort. aber ich bin nicht sicher, ob der obige Code finden wird, wenn alle Zellen in der Spalte "Null" String enthalten.Bitte beachten Sie, dass ich nicht nach Null Wert suche. Seine "Null" Zeichenfolge. Entschuldigung, wenn ich das bei meiner Frage verpasst habe. –

+0

Gibt es trotzdem, dass ich Suche, Suche, Match-Befehl für <> (Suchzeichenfolge) verwenden kann. So dass ich nach etwas wie "<> Null" in der Spalte suchen und löschen kann, wenn nicht gefunden. –

+0

Nicht wirklich. Sie können Home> Suchen und Auswählen> Konstanten oder Formeln – Slai

2

in dem Arbeitsblatt die Formel:

=COUNTBLANK(A:A) 

werden 1.048.576 zurück, wenn alle Zellen in dieser Spalte entweder NULL oder völlig leer sind. Das können wir im Makro nutzen:

Sub KolumnKiller() 
    With Application.WorksheetFunction 
     For i = Columns.Count To 1 Step -1 
      If .CountBlank(Columns(i)) <> Rows.Count Then Exit For 
     Next i 

     For j = i To 1 Step -1 
      If .CountBlank(Columns(j)) = Rows.Count Then 
       Columns(j).Delete 
      End If 
     Next j 
    End With 
End Sub 

Die erste Schleife findet einen guten Startplatz für die zweite Schleife.

Verwandte Themen