Vba 确定具有某些值的excel列

Vba 确定具有某些值的excel列,vba,excel,Vba,Excel,我的目标是确定工作表中具有某些值的列。如果列没有值,则应将其隐藏。我已尝试将其作为: Sub HideEmptyCols() Dim LastCol As Long, i As Long LastCol = ActiveSheet.UsedRange.Columns.Count For i = 1 To LastCol If WorksheetFunction.Count(Columns(i)) = 0 Then Columns(

我的目标是确定工作表中具有某些值的列。如果列没有值,则应将其隐藏。我已尝试将其作为:

Sub HideEmptyCols()
    Dim LastCol As Long, i As Long
    LastCol = ActiveSheet.UsedRange.Columns.Count

    For i = 1 To LastCol
        If WorksheetFunction.Count(Columns(i)) = 0 Then
            Columns(i).EntireColumn.Hidden = True
        End If
    Next i
End Sub
如果一个列没有任何值,它可以正常工作,但如果一个列在最后一行中有值,它也会隐藏该列。我正在寻找到底为什么会发生这种情况,以及如何实现这一目标

试试看:

Sub ColumnHider()
    Dim wf As WorksheetFunction
    Set wf = Application.WorksheetFunction
    Set r = ActiveSheet.UsedRange
    nLastRow = r.Rows.Count + r.Row - 1
    nLastColumn = r.Columns.Count + r.Column - 1

    For i = 1 To nLastColumn
        Set rcol = Cells(1, i).EntireColumn
        If wf.CountA(rcol) = 0 Then
            rcol.Hidden = True
        End If
    Next i
End Sub
编辑1:

如果标题下的所有单元格均为空,则此版本将隐藏该列:

Sub ColumnHider()
    Dim wf As WorksheetFunction
    Set wf = Application.WorksheetFunction
    Set r = ActiveSheet.UsedRange
    nLastRow = r.Rows.Count + r.Row - 1
    nLastColumn = r.Columns.Count + r.Column - 1

    For i = 1 To nLastColumn
        Set rcol = Range(Cells(2, i), Cells(Rows.Count, i))
        If wf.CountA(rcol) = 0 Then
            rcol.EntireColumn.Hidden = True
        End If
    Next i
End Sub

回答了50%的问题,但为什么会出现这种情况?@mehow如果不看OP的工作表,我就无法回答这个问题。我的第一列有标题,但只有在顶行没有任何值时才起作用。如果顶行有值,则该列不是空的,并且该列不应隐藏。除了headerColumn,如果列没有值,则必须将其隐藏。希望它更清楚。