0

我有一种情况,定义的表结构会根据控件类型发生变化(例如,它是产品品牌)。在该表中,需要使用两列/字段来填充同一工作表上的两个数据验证单元格。这些单元格位于表格上方,“理想情况下”将用于根据填充数据验证单元格的数据过滤表格的信息。

数据验证列表方法逻辑:

  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 列,则会出错。

上面的方法被封装在一个传递两个参数的方法Table1[Column1]DataValidationCell1VBA中。

只是为了避免任何问题,这里是方法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. 由于数据透视表不是一个合理的选项,由于信息的性质,如果数据验证过滤在功能上不可行,我还有什么选择?

在 #3 上,如果可能的话,我不想放置下拉列表。

4

1 回答 1

1

数据验证是一种限制可以在单元格(或一系列单元格)中输入哪种数据的方法http://office.microsoft.com/en-us/excel-help/apply-data-validation-to -细胞-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

希望这可以帮助。祝你好运。

于 2012-10-08T16:21:43.327 回答