Excel vba循环遍历列并基于单元格值隐藏

时间:2018-02-10 05:09:04

标签: excel vba excel-vba

在工作表的列F和BM之间,如果这些列中的任何值等于“NULL”,则不要隐藏,否则隐藏该列,列之前和之后的列。循环应该从列G开始并在列BM结束时评估每隔一个3。

例如,如果列G包含值“NULL”,则不执行任何操作并转到列J(向前三列)。如果列J现在没有值为NULL的单元格,则隐藏该列,前一列(第一列)和后一列(列K)。

这就是我遇到的麻烦。我可以根据列是否包含值NULL来隐藏列。

这是我尝试过的代码变体。

multiplicative_inverse

2 个答案:

答案 0 :(得分:1)

可能是这样的:

Sub HideColumnWithoutNullString()

    Dim range, colCount, rowCount, hasNull, rowsToCheck

    Dim firstColumn, currentColumn, lastColumn

    Set range = Application.range("G:BM")

    firstColumn = range.Columns(0).Column

    lastColumn = range.Columns(range.Columns.Count).Column

    currentColumn = 0

    rowsToCheck = 1


    For colCount = firstColumn To lastColumn Step 1

        hasNull = False

        For rowCount = 1 To range.Rows.Count Step 1

            If Application.Cells(rowCount, colCount).Value = "NULL" Then

                hasNull = True

                Exit For

            End If

            If rowCount >= rowsToCheck Then
                Exit For
            End If

        Next

        If Not hasNull Then
            range.Columns(currentColumn).Hidden = True
        Else
            range.Columns(currentColumn).Hidden = False
        End If

        currentColumn = currentColumn + 1

    Next

End Sub

其中rowsToCheck是脚本必须检查的行数" NULL"在每列上,如果只需检查第一行,则将其值设置为1。

答案 1 :(得分:1)

这个逻辑与Octavio的答案遵循相同的逻辑,但会检查空列或“NULL”的值。

    Sub SuspenseReport()
    Dim col As Range
    Application.ScreenUpdating = False
    Set Rng = Application.Range("G2:BO8") 
    vLr = ActiveCell.SpecialCells(xlLastCell).Row
    For Each col In Rng.Columns
        vFlag = False
        For vrow = 2 To vLr
            vX = Cells(vrow, col.Column).Value
            If vX = "" Or vX = "NULL" Then
                vFlag = True
            End If
        Next
        If vFlag Then
            col.EntireColumn.Hidden = False
        Else
            col.EntireColumn.Hidden = True
        End If
    Next col
    Application.ScreenUpdating = True
    End Sub