没有隐藏行的下拉菜单如何忽略隐藏的行?

时间:2015-09-29 06:11:56

标签: excel excel-formula excel-2010

我有一个隐藏行的列表,想要创建一个没有隐藏行的下拉菜单。我怎么能这样做,以便下拉列表只使用未隐藏的行/单元格?

如果我将行过滤到我的标准,并且我想要从未隐藏的行中创建其余单元格的下拉菜单。它还使用隐藏的行。我不想要的。 我无法删除隐藏的行。只有在没有隐藏的东西的情况下复制这些东西并不是最好的主意。

所以有人知道我的下拉菜单如何忽略隐藏的行/单元格吗?

请帮帮我:)谢谢

1 个答案:

答案 0 :(得分:0)

范围是类型" List"的数据验证来源。不会对隐藏的行做出反应。

你可以做的是

  • 创建一个原始值列表(包括允许AutoFilter的标题)
  • 创建另一个范围,该范围仅包含原始列表的过滤/显示值,并用作实际数据验证源
  • 运行VBA,仅将非隐藏行从原始列表复制到已过滤列表

在下面的示例中,命名范围List_of_Values包含所有可能的选择以及仅使用自动筛选的列标题,命名范围FilteredList最初只是一个空单元格,下面有足够的空间,数据验证设置为允许 - > List /来源 - > =FilteredList

现在您将任何过滤器应用于原始列表,无论如何(按钮,诸如sheet.deactivate之类的事件,或只是Developer / Macros / Run等),您启动Sub Update_LOV,它将仅复制非隐藏的行原始到过滤/验证列表。

Sub Update_LOV()
Dim R_Filt As Range, R_Orig As Range, Idx As Integer, Jdx As Integer

    Set R_Orig = Range("List_of_Values")
    Set R_Filt = Range("FilteredList")
    Idx = 1
    Jdx = 1

    R_Filt.Clear

    Do While R_Orig(Idx, 1) <> ""

        If Not R_Orig(Idx, 1).EntireRow.Hidden Then
            R_Filt(Jdx, 1) = R_Orig(Idx, 1)
            Jdx = Jdx + 1
        End If

        Idx = Idx + 1
    Loop
    Range(R_Filt(1, 1), R_Filt(Jdx - 1, 1)).Name = R_Filt.Name.Name

End Sub