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