簡體   English   中英

根據單元格的值隱藏Excel中的多個列

[英]Hiding multiple columns in Excel based on the value of a cell

我試圖根據特定單元格中的值將列隱藏在工作表中。 此值的范圍為1到30,並且為每個可能的選項隱藏不同的列。 我有以下代碼,但它似乎並不總是有效,然后有時它只隱藏范圍中的一些列,但不是全部(如果5在單元格AA1中,那么有時AN:AR將隱藏和AS:FC不會被隱藏)。 如果有人有任何想法,我將不勝感激。 謝謝!

我有一個示例工作簿: https//drive.google.com/file/d/0B8qPItN2DU0BZ3B0LW1XUS1BMFk/view?usp=sharing

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("AA1").Value = 1 Then
    Columns("O:FC").EntireColumn.Hidden = True
Else
    Columns("O:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 2 Then
    Columns("T:FC").EntireColumn.Hidden = True
Else
    Columns("T:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 3 Then
    Columns("Y:FC").EntireColumn.Hidden = True
Else
    Columns("Y:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 4 Then
    Columns("AD:FC").EntireColumn.Hidden = True
Else
    Columns("AD:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 5 Then
    Columns("AI:FC").EntireColumn.Hidden = True
Else
    Columns("AI:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 6 Then
    Columns("AN:FC").EntireColumn.Hidden = True
Else
    Columns("AN:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 7 Then
    Columns("AS:FC").EntireColumn.Hidden = True
Else
    Columns("AS:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 8 Then
    Columns("AX:FC").EntireColumn.Hidden = True
Else
    Columns("AX:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 9 Then
    Columns("BC:FC").EntireColumn.Hidden = True
Else
    Columns("BC:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 10 Then
    Columns("BH:FC").EntireColumn.Hidden = True
Else
    Columns("BH:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 11 Then
    Columns("BM:FC").EntireColumn.Hidden = True
Else
    Columns("BM:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 12 Then
    Columns("BR:FC").EntireColumn.Hidden = True
Else
    Columns("BR:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 13 Then
    Columns("BW:FC").EntireColumn.Hidden = True
Else
    Columns("BW:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 14 Then
    Columns("CB:FC").EntireColumn.Hidden = True
Else
    Columns("CB:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 15 Then
    Columns("CG:FC").EntireColumn.Hidden = True
Else
    Columns("CG:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 16 Then
    Columns("CL:FC").EntireColumn.Hidden = True
Else
    Columns("CL:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 17 Then
    Columns("CQ:FC").EntireColumn.Hidden = True
Else
    Columns("CQ:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 18 Then
    Columns("CV:FC").EntireColumn.Hidden = True
Else
    Columns("CV:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 19 Then
    Columns("DA:FC").EntireColumn.Hidden = True
Else
    Columns("DA:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 20 Then
    Columns("DF:FC").EntireColumn.Hidden = True
Else
    Columns("DF:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 21 Then
    Columns("DK:FC").EntireColumn.Hidden = True
Else
    Columns("DK:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 22 Then
    Columns("DP:FC").EntireColumn.Hidden = True
Else
    Columns("DP:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 23 Then
    Columns("DU:FC").EntireColumn.Hidden = True
Else
    Columns("DU:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 24 Then
    Columns("DZ:FC").EntireColumn.Hidden = True
Else
    Columns("DZ:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 25 Then
    Columns("EE:FC").EntireColumn.Hidden = True
Else
    Columns("EE:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 26 Then
    Columns("EJ:FC").EntireColumn.Hidden = True
Else
    Columns("EJ:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 27 Then
    Columns("EO:FC").EntireColumn.Hidden = True
Else
    Columns("EO:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 28 Then
    Columns("ET:FC").EntireColumn.Hidden = True
Else
    Columns("ET:FC").EntireColumn.Hidden = False
End If

If Range("AA1").Value = 29 Then
    Columns("EY:FC").EntireColumn.Hidden = True
Else
    Columns("EY:FC").EntireColumn.Hidden = False
End If

End Sub

您正在隱藏一系列列,並且當您執行代碼時,您正在隱藏,然后重新顯示許多列。

最好先在示例中顯示最大范圍(O:FC)中的所有列,然后僅隱藏與您的值匹配的列。 所以你可以將if else結構更改為像這樣的選擇案例:

Columns("O:FC").EntireColumn.Hidden = False

select case Range("AA1").Value
    case 1:
      Columns("O:FC").EntireColumn.Hidden = True
    case 2:
      Columns("T:FC").EntireColumn.Hidden = True
    ' Add extra cases for each possible value
end select

看起來AA1中的值每個整數增加了5列的模式,所以:

Dim v, sht

Set sht = ActiveSheet
v = sht.Range("AA1").Value

sht.Columns("O:FC").EntireColumn.Hidden = False

If v >= 1 And v <= 30 Then
    sht.Range(sht.Cells(1, 10+(5*v)), _
              sht.Range("FC1")).EntireColumn.Hidden = True
End If

雖然從問題中確切地說隱藏/顯示的邏輯是什么並不是特別清楚。

暫無
暫無

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

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