vba在整列数据为“时删除excel列”;空";

vba在整列数据为“时删除excel列”;空";,excel,vba,Excel,Vba,我正在尝试创建一个vba,它将检查列的所有值是否为“Null”(字符串值)而不是空或空,如果它有“Null”字符串值,它将删除整个列。 我可以使用for循环遍历单元格中的所有值,但它很耗时。我正在寻找使用自动筛选或查找命令的选项。 如有任何建议,将不胜感激。 谢谢。在工作表中,公式如下: =COUNTBLANK(A:A) 如果该列中的所有单元格都为NULL或完全为空,则返回1048576。我们可以在宏中利用这一点: Sub KolumnKiller() With Application

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

在工作表中,公式如下:

=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
Sub-KolumnKiller()
使用Application.WorksheetFunction
对于i=列。计数为1步骤-1
如果.CountBlank(列(i))行.Count,则退出
接下来我
对于j=i到1步骤-1
如果.CountBlank(Columns(j))=Rows.Count,则
第(j)栏。删除
如果结束
下一个j
以
端接头

第一个循环为第二个循环找到了良好的起点。

在工作表中,公式如下:

=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
Sub-KolumnKiller()
使用Application.WorksheetFunction
对于i=列。计数为1步骤-1
如果.CountBlank(列(i))行.Count,则退出
接下来我
对于j=i到1步骤-1
如果.CountBlank(Columns(j))=Rows.Count,则
第(j)栏。删除
如果结束
下一个j
以
端接头
第一个循环为第二个循环找到了一个良好的起点。

类似

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

我认为Excel中不能有“空”单元格值。我试过这个

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”)
来计算“Null”单元格的数量

Dim col As Range
对于UsedRange.列中的每个列
'NullCount=WorksheetFunction.CountIf(col,“Null”)
'NotNullCount=WorksheetFunction.CountIf(col,“Null”)
'blankscont=WorksheetFunction.CountBlank(col)
'nonblankscont=WorksheetFunction.CountA(col)
使用工作表功能
如果.CountA(col)=.CountIf(col,“Null”)+1,则列标题单元格为'1
col.EntireColumn.Delete
如果结束
以
下一个
类似

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

我认为Excel中不能有“空”单元格值。我试过这个

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”)
来计算“Null”单元格的数量

Dim col As Range
对于UsedRange.列中的每个列
'NullCount=WorksheetFunction.CountIf(col,“Null”)
'NotNullCount=WorksheetFunction.CountIf(col,“Null”)
'blankscont=WorksheetFunction.CountBlank(col)
'nonblankscont=WorksheetFunction.CountA(col)
使用工作表功能
如果.CountA(col)=.CountIf(col,“Null”)+1,则列标题单元格为'1
col.EntireColumn.Delete
如果结束
以
下一个

Slai,谢谢你的回答。但是我不确定上面的代码是否会发现列中的所有单元格都包含“Null”字符串。请注意,我没有检查Null值。它的“Null”字符串。很抱歉,如果我的问题遗漏了这个。我是否可以使用Find、search、match命令(搜索字符串)。这样我就可以在列中搜索类似于“Null”的内容,如果找不到,就删除。不是真的。您可以在VBA中完成主页>查找和选择>常量或公式,因为它是一个自动化工具。此外,请将单元格值视为字符串类型“NULL”,而不是数据类型。请参阅我的图片附带的问题。必须删除图像列中的“B”。因为它的所有单元格值都为“Null”。我刚刚看到图像,现在我不确定为什么我的答案被接受,即使我误解了这个问题。我会试着想出另一个答案。斯莱,谢谢你的回答。但是我不确定上面的代码是否会发现列中的所有单元格都包含“Null”字符串。请注意,我没有检查Null值。它的“Null”字符串。很抱歉,如果我的问题遗漏了这个。我是否可以使用Find、search、match命令(搜索字符串)。这样我就可以在列中搜索类似于“Null”的内容,如果找不到,就删除。不是真的。您可以在VBA中完成主页>查找和选择>常量或公式,因为它是一个自动化工具。此外,请将单元格值视为字符串类型“NULL”,而不是数据类型。请参阅我的图片附带的问题。必须删除图像列中的“B”。因为它的所有单元格值都为“Null”。我刚刚看到图像,现在我不确定为什么我的答案被接受,即使我误解了这个问题。我将设法想出另一个答案。