Vba 根据从下拉列表中选择的数字隐藏单元格

Vba 根据从下拉列表中选择的数字隐藏单元格,vba,drop-down-menu,show-hide,Vba,Drop Down Menu,Show Hide,我的工作表中有两组数据-第一组是每台机器1行,第二组是每台机器13行。从下拉框中,用户将从1、2、3、4、5、10、15、20、25、30中选择对应于机器数量的值 当选择一个值时,需要隐藏两个数据集中的对应行。例如,如果用户选择5,则仅显示机器1到5的行 到目前为止,我已经有了以下代码,但是我想知道是否有一种简化的方法来实现这一点,因为我还没有在各个值(1-5)中添加,以及如何在从下拉列表中选择值时运行此操作 Sub HideRows() If Range("F19") = "10" Then

我的工作表中有两组数据-第一组是每台机器1行,第二组是每台机器13行。从下拉框中,用户将从1、2、3、4、5、10、15、20、25、30中选择对应于机器数量的值

当选择一个值时,需要隐藏两个数据集中的对应行。例如,如果用户选择5,则仅显示机器1到5的行

到目前为止,我已经有了以下代码,但是我想知道是否有一种简化的方法来实现这一点,因为我还没有在各个值(1-5)中添加,以及如何在从下拉列表中选择值时运行此操作

Sub HideRows()

If Range("F19") = "10" Then
    Rows("31:60").EntireRow.Hidden = False
    Rows("84:473").EntireRow.Hidden = False
    Rows("41:60").EntireRow.Hidden = True
    Rows("214:473").EntireRow.Hidden = True
ElseIf Range("F19") = "15" Then
    Rows("31:60").EntireRow.Hidden = False
    Rows("84:473").EntireRow.Hidden = False
    Rows("46:60").EntireRow.Hidden = True
    Rows("279:473").EntireRow.Hidden = True
ElseIf Range("f19") = "20" Then
    Rows("31:60").EntireRow.Hidden = False
    Rows("84:473").EntireRow.Hidden = False
    Rows("51:60").EntireRow.Hidden = True
    Rows("344:473").EntireRow.Hidden = True
ElseIf Range("f19") = "25" Then
    Rows("31:60").EntireRow.Hidden = False
    Rows("84:473").EntireRow.Hidden = False
    Rows("56:60").EntireRow.Hidden = True
    Rows("409:473").EntireRow.Hidden = True
ElseIf Range("f19") = "30" Then
    Rows("31:60").EntireRow.Hidden = False
    Rows("84:473").EntireRow.Hidden = False
End If
End Sub

谢谢

我提供了一个更通用的解决方案。您需要在工作表模块中使用工作表更改

参考:


谢谢你的密码。我将代码复制到工作簿的module1中,并更新了单元格引用和行,但是当我更改下拉框中的值时,它没有做任何事情?任何想法..您需要将代码复制到Sheet模块,而不是您自己的模块,Sheet模块的意思是“Sheet1(Sheet1)”谢谢-当我点击30时,它似乎隐藏了第30行?另外,在每个范围的底部,我有一个总计列。在第31:60行的第一个范围中,当我从下拉列表中选择一个数字时,第61行和第62行的总数也被隐藏了-我怎么能不隐藏它们?我不太理解你的情况,但我相信你可以操纵数字,或者将要隐藏的范围拆分为2、3、4个部分以获得结果。
Private Sub Worksheet_Change(ByVal Target As Range)
Debug.Print Target.Address

If Target.Address = "$A$1" Then 'change the address to the dropdown box cell you have
    Debug.Print Target.Value
    NumMachineShow = CLng(Target.Value)
    Cells.EntireRow.Hidden = False ' reset, unhidden every row first
    Rows(31 + NumMachineShow & ":60").EntireRow.Hidden = True ' hide the unwanted 1 row per machine here
    Rows(61 + NumMachineShow * 13 & ":473").EntireRow.Hidden = True ' hide the detail, you need to modify the numbers yourself
End If

End Sub