![](/img/trans.png)
[英]Automatically Hide/Unhide Column's based on value in row that is formula transposed from another worksheet
[英]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 Range
。 Named 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.