当整列数据为“空”时,vba删除excel列

时间:2016-07-12 20:56:21

标签: excel-vba vba excel

enter image description here我正在尝试创建一个vba,它将检查列是否具有“Null”(字符串值)非空或空白的所有值,如果它具有“Null”字符串值,它将删除整栏。 我可以使用for循环遍历单元格中的所有值,但这很耗时。我正在寻找使用AutoFilter或Find命令的选项。 任何建议,将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:2)

在工作表中,公式为:

=COUNTBLANK(A:A)
如果该列中的所有单元格都是 NULL 或完全为空,则

将返回1048576。我们可以在宏中利用这一点:

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

第一个循环找到第二个循环的良好起始位置。

答案 1 :(得分:0)

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

<强>更新

我认为您不能在Excel中使用“Null”单元格值。我试过这个

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"

更新2

另一种较慢的方法是找到列中的所有空白单元格

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

更新3

您可以使用WorksheetFunction.CountIf(col, "Null")来计算“空”单元格的数量

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