簡體   English   中英

如何基於行值自動隱藏列,行值基於相對工作表中的if函數?

[英]How to automatically hide column based on row value, which is based on an if function from an opposing worksheet?

因為我是自學成才的,並且對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

所以這是您需要做的:

首先在工作表中為要在其中檢查No的行定義一個Named RangeNamed Range好處是它是Dynamic ,因此,如果在第三行之前添加另一行,它將動態將命名范圍移動到第四行。

像這樣:

命名范圍

在完成命名范圍后,將此代碼添加到工作表中:

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 

確保代碼在正確的工作表上可以工作:

片

這將是完整的動態代碼。

希望更快一點

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM