2017-11-08 1 views
0

Ich versuche leere Spalten im Arbeitsblatt von Zeile 2 zu löschen. Wenn die gesamte Spalte leer ist, möchte ich die Spalte löschen.Leere Spalten löschen, beginnend bei Zeile 2

Der Grund, warum ich von Zeile 2 aus gehe, ist, weil ich Header in Zeile 1 habe. Anschließend werden diese auch gelöscht, wenn diese Spalte leer ist. Wie starte ich von Zeile 2?

Sub Delete_Cols() 
Dim MyRange As Range 
    Dim iCounter As Long 
    Set MyRange = ActiveSheet.UsedRange 
    For iCounter = MyRange.Columns.Count To 1 Step -1 
     If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then 
     Columns(iCounter).Delete 
     End If 
    Next iCounter 
End Sub 

muss ich das Makro für leere Spalten von Zeile Überprüfung starten 2.

+0

@danieltakeshi - in diesem Fall der Zeile 1 wird durch 'Spalten (iCounter) .Delete' noch gelöscht werden. – Vityata

+0

Ja, jetzt glaube ich, ich habe seine Frage verstanden (immer noch etwas verwirrt). Weil ich die [andere Frage] (https://stackoverflow.com/questions/47162391/delete-blank-rows-from-column-b) gelesen habe, die ich fragte, dass er versuchte, diesen Code zu reparieren. Aber es ist ganz anders. – danieltakeshi

+0

Warum nicht Application.CountA (Columns (iCounter) .EntireColumn) = 1 – Storax

Antwort

0

Wenn ich du hast Recht würden Sie gerne sehen, wenn die Spalte, beginnend bei Zeile 2 leer ist und wenn ja, yoo würde mag die Spalte löschen. Wenn Sie einen Header in jedem Spalte Code haben muss nur eine kleine Korrektur

Sub Delete_Cols() 
    Dim MyRange As Range 
    Dim iCounter As Long 
    Set MyRange = ActiveSheet.UsedRange 
    For iCounter = MyRange.Columns.Count To 1 Step -1 
     If Application.CountA(Columns(iCounter).EntireColumn) = 1 Then 
      Columns(iCounter).Delete 
     End If 
    Next iCounter 
End Sub 
+0

vielen Dank das funktioniert – James

0

Sie müssen Clear und nicht zu Delete, wenn Sie von Row starten möchten 2. Dies ist ein Weg zu gehen drumherum:

If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then 
    Range(Cells(2, iCounter), Cells(2^16, iCounter)).Clear 
End If 

Es wird die Bereiche von Zeile 2 bis Zeile 65536 löschen. Wahrscheinlich wird es so funktionieren, wie Sie es wollen.

+0

dass oben genannten Code einen Laufzeitfehler gibt – James

+0

@James - wählen Sie das richtige Blatt und führen Sie es erneut aus. – Vityata

0

Die VBA löscht unten eine Spalte in Ihrem Blatt, wenn es leer ist:

Sub DeleteEmptyColumns() 
    'Updateby20140317 
    Dim rng As Range 
    Dim InputRng As Range 
    xTitleId = "KutoolsforExcel" 
    Set InputRng = Application.Selection 
    Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8) 
    Application.ScreenUpdating = False 
    For i = InputRng.Columns.Count To 1 Step -1 
     Set rng = InputRng.Cells(1, i).EntireColumn 
     If Application.WorksheetFunction.CountA(rng) = 0 Then 
     rng.Delete 
    End If 
    Next 
    Application.ScreenUpdating = True 
End Sub 
+0

löscht das aus Zeile 2? – James