根据单元格的值在Excel中隐藏多个列

我试图让列隐藏在工作表中的基于某个单元格中的值。 该值可能介于1到30之间,每个可能的选项都会隐藏不同的列。 我有下面的代码,但它似乎并不一直工作,然后有时它只隐藏范围内的一些列,但不是全部(如5如果在单元格AA1,那么有时AN:AR会隐藏和AS:FC不会被隐藏)。 如果有人有任何想法,我将不胜感激的帮助。 谢谢!

我有一个示例工作手册: https : //drive.google.com/file/d/0B8qPItN2DU0BZ3B0LW1XUS1BMFk/view?usp =分享

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 

似乎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 

虽然从这个问题来看,隐藏/显示的逻辑究竟是什么,并不是特别清楚。

您隐藏了一系列的列,并且随着您的代码被执行,您正在隐藏,然后重新显示大量的列。

在你的例子中,首先显示最大范围(O:FC)中的所有列,然后只隐藏与你的值相匹配的列。 所以你可以把if else结构改成这样的select case:

 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