如何基于行值自动隐藏列,行值基于相对工作表中的if函数?

时间:2019-07-05 14:48:26

标签: excel vba

请接受我的指导,因为我是自学成才的,并且对VBA编码非常新。

我需要有关工作项目代码的帮助,该代码可基于该列中的行值自动/动态隐藏该列。在我的示例中,基于备用工作表中的“是/否”数据验证列表,当前工作表将更新并返回相同的“是”或“否”值。如果答案为“否”,则当用户从“数据验证”列表中选择该选项后,我需要该列自动消失。

数据集如下: 是/否结果在第3行中的列范围B:AR中。 第3行的结果是来自另一个工作表的转码公式的结果。

如果代码是真正的动态代码,那么如果我在行3上方添加行,代码将自动移至行4。

我已经搜索了Google领域,大多数代码要么没有更新,要么非常缓慢。我尝试过的几个代码示例如下:

Sub Hide_Columns_Containing_Value()

    Dim c As Range
    For Each c In Range("B3:AR3").Cells
        If c.Value = "No" Then
            c.EntireColumn.Hidden = True
        End If
    Next c

End Sub

2 个答案:

答案 0 :(得分:0)

这就是您需要做的:

首先在工作表中为要检入Named Range的行定义一个NoNamed Range的好处是它是Dynamic,所以如果添加另一行在第3行之前,它将动态将“命名范围”移动到第4行。

赞:

Named Range

完成命名范围后,将此代码添加到工作表中:

Private Sub Worksheet_Change(ByVal Target As Range)


If Not Intersect(Target, Range("roww")) Is Nothing Then

    For Each cel In Range("roww")
            If cel.Value = "No" Then Columns(cel.Column).EntireColumn.Hidden = True
    Next

End If


End Sub

-要在第一个代码下方添加第二个代码。

Sub hdd()    

For Each cel In Range("roww")
            If cel.Value = "No" Then Columns(cel.Column).EntireColumn.Hidden = True
Next

End Sub 

确保代码在正确的工作表上可以正常工作:

Sheet

这将是完整的动态代码。

答案 1 :(得分:0)

希望更快一点

Sub Hide_Columns_Containing_Value( _
        ByVal msg As String, _
        ByVal r As Range)

    Dim c As Range

    Set c = r.Find(msg)

    If Not c Is Nothing Then

        c.EntireColumn.Hidden = True

    End If
End Sub