DataValidation筛选表

时间:2012-10-08 15:53:48

标签: excel excel-vba excel-2010 validation vba

我的情况是定义的表结构根据控件类型而改变(对于我的实例,它是一个产品品牌)。在该表中,有两个列/ fiel需要用于在同一工作表上填充两个数据验证单元格。这些细胞位于表格之上,并且理想情况下是#34;将用于根据填充数据验证单元格的数据过滤表格的信息。

数据验证列表方法逻辑:

  Dim str As String
  str = Join(UniqueValues(ws,srcrng), ",")
  Dim val As Excel.Validation
  Set val = range(destrng).Validation
  val.Delete
  val.Add xlValidateList, xlValidAlertStop, xlBetween, str
  • ws :@srcrng所在的工作表
  • srcrng :从
  • 中提取唯一值的范围
  • destrng :数据验证附加到的范围。这将被控制为只有一个单元格,如果有超过1行和1列,则会出错。

Above方法封装在一个方法中,该方法在VBA中传递了两个参数Table1[Column1]DataValidationCell1

只是为了避免任何问题,这是方法UniqueValues逻辑:

Function UniqueValues(ws As Worksheet, col As String) As Variant

   Dim rng As range: Set rng = ws.range(col)
   Dim dict As New Scripting.Dictionary

   If Not (rng Is Nothing) Then
      Dim cell As range, val As String

      For Each cell In rng.Cells
         val = CStr(cell.Value)
         If InStr(1, val, ",") Then
            val = Replace(val, ",", Chr(130))  <-- Handles the fact i have commas in the field
         End If

         If Not dict.Exists(val) Then
            dict.Add val, val
         End If

      Next cell
   End If

   'Return value as Variant Array
   UniqueValues = dict.Items
End Function

问题:

  1. 如何解释数据验证更改?
  2. 我可以使用数据验证过滤表吗?
  3. 由于信息的性质,由于数据验证过滤功能不可行,所以Pivot-Table不是一个合理的选择,我还有什么选择?
  4. 在#3上,如果可能的话,我不想放置一个下拉列表。

1 个答案:

答案 0 :(得分:1)

数据验证是一种限制在单元格(或一系列单元格)中输入哪种数据的方法http://office.microsoft.com/en-us/excel-help/apply-data-validation-to-cells-HP010072600.aspx

因此,您的问题并非针对数据验证。您的问题似乎是基于在该表顶部的两个单元格中输入的值来过滤表格(恰好应用了数据验证)。我对么?如果是这样的话:每次更改这些数据验证单元时,您将需要运行宏。您可以使用Sub Worksheet_Change(ByVal Target As Range)自动进行此操作,或者您可以使用“更新过滤器”按钮,该按钮稍微不那么“酷”。无论哪种方式,您只需要在宏中链接这两个单元格,并让它们根据这两个单元格的值更新表格中的过滤器。

这是一个宏的例子,可以像我描述的那样:

Sub Worksheet_Change(ByVal Target As Range) 

    ActiveSheet.AutoFilterMode = False 
    Range("A3:H20").AutoFilter 
    Range("A3:H20").AutoFilter Field:=2, Criteria1:=Range("A1").Text 

End Sub 

来自:http://www.ozgrid.com/forum/showthread.php?t=85547

希望这会有所帮助。祝你好运。