簡體   English   中英

Excel VBA-隱藏/取消隱藏“ na”列

[英]Excel VBA - hide/unhide “na” columns

首先,我想讓您知道VBA的新功能。 我可以根據需要復制和粘貼某些數據並調整范圍,僅此而已。 現在我的問題:

我有31列(E27:AI27)組成的行。 這個范圍內的所有單元格都從該范圍外的其他單元格獲取輸入(從1-31的數字),比方說從幾個下拉列表中獲取。 根據我下拉的方式,這些下拉列表列出了該特定范圍內的數字順序(E27:AI27)可能類似於以下替代方法:

Alt。 01:1 2 3 4 5 ................................ 29 30 31(總共31個單元格)

Alt。 02:2 3 4 5 6 .................................... 29 30 31 na(總共31個單元格)

Alt。 03:3 4 5 6 7 .................................... 30 31 na na(總共31個單元格)

Alt。 04:4 5 6 7 8 ...................... 30 31 na na na(總共31個單元格)

等等等等

Alt。 30:30 31 na ...................... na na na na na(總共31個單元格)

Alt。 31:31 na na ........................... na na na na na(總共31個單元格)

現在,我要做的是自動地,暫時地隱藏其中包含字符串“ na”的那些列。 然后,當我再次重新更改下拉列表時,我希望能夠取消隱藏從“ na”變為數字的那些列。 例如,我希望能夠在備選方案1和備選方案2之間切換(請參見上文),以了解我如何下拉列表。 在這兩種選擇之間切換意味着AI27從顯示,隱藏,顯示,隱藏等等(而E27AH27都將顯示,因為它們內部都有1-30的數字)。

最后但並非最不重要的一點是,有兩個下拉列表控制着單元格E27:AI27的值。 下拉列表稱為月(C18)和下拉列表稱為日(D18)。 前者(C18)將日期設置為一個月。 如果C18 = February,那么將有28天,最后兩列(AH:AI)為“ na”。 除了后面的下拉列表(D18)設置開始日期外,還命名序列中的第一個數字(在單元格E27中)。 如果D18 = 21,那么二月份的替代方案將是:

21 22 23 24 25 26 27 28 na na na na na na na na na na na na ....(包含23 na)

如果可能的話,有人可以幫我建立一個簡單且簡短的VBA代碼嗎? 高度贊賞

試試這個:

Private Sub Worksheet_Change(ByVal Target As Range)
    'change the "E23" with the cell with your dropdown
    If Not Intersect(Target, Range("E23")) Is Nothing Then
        Call UnhideHideColumns
    End If
End Sub

Sub UnhideHideColumns()

Dim bytColumnCheck As Byte
Dim blnNeedToUnhide As Boolean
Dim intFirstNAColumn As Integer

'check all columns and find out if they are already hidden
For bytColumnCheck = 5 To 35
    'if any of the columns is hidden, unhide all the columns to the right and exit loop
    If Cells(1, bytColumnCheck).EntireColumn.Hidden = True Then
        Range(Cells(1, bytColumnCheck), Cells(1, 35)).EntireColumn.Hidden = False
        Exit For
    End If
Next bytColumnCheck

'find first occurence of "na" in values, if any exists
If Not Cells.Find("na", LookIn:=xlValues, after:=Range("E27")) Is Nothing Then
    intFirstNAColumn = Cells.Find("na", LookIn:=xlValues).Column

    'now hide the columns to the right of the first "NA", including
    Range(Cells(1, intFirstNAColumn), Cells(1, 35)).EntireColumn.Hidden = True
End If

End Sub

請注意,每次具有下拉菜單的單元格發生更改時,都會Call UnhideHideColumns ,甚至可以說是從Set1到Set1,或者從5到5。所以它可以經常觸發不必要的宏。

這為我工作:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim i As Integer
    For i = 9 To 40: Cells(28, i).EntireColumn.Hidden = Cells(28, i) = "na": Next

End Sub

暫無
暫無

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

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