一个单元可以同时进行数据验证和vlookup吗?

时间:2013-03-15 20:58:53

标签: excel excel-vba vba

基本上我有2个细胞。一个是产品描述,一个是产品编号。它现在的存在方式,产品描述是经过数据验证的,产品编号是按描述查找的。

我想要发生的是能够根据产品编号或产品描述进行查找,这样基本上如果我从下拉列表中选择产品编号,产品描述就是查找,如果我从下拉列表中选择产品描述下面列出产品编号是查找。

这是可能的,还是我想错了?

1 个答案:

答案 0 :(得分:0)

回答一个老问题,因为其他人没有做到...... 希望这对其他人也有帮助。另外,请参阅代码中的注释。

这不能用Excel Formula& amp;验证,因为它会创建循环引用 [不是你不能改变循环迭代的数量,但仍然......]

在VBA中简单得多......以下是任何想要使用它的人的代码..

Private Sub Worksheet_Change(ByVal Target As Range)
    Const sNumRng As String = "$A$1"
    Const sDescRng As String = "$B$1"
    '# both sListRngNum & sListRngDesc must be of the same size
    Const sListRngNum As String = "$K$1:$K$4"
    Const sListRngDesc As String = "$L$1:$L$4"

    '# EnableEvnent should be disabled first
    '# because the code will trigger it again
    '# by changing the next cell value
    Application.EnableEvents = False

    If Target.Address = sNumRng Then
       Range(sDescRng).Value = WorksheetFunction.Index(Range(sListRngDesc), _
       WorksheetFunction.Match(Target.Value, Range(sListRngNum), 0))
    ElseIf Target.Address = sDescRng Then
       Range(sNumRng).Value = WorksheetFunction.Index(Range(sListRngNum), _
       WorksheetFunction.Match(Target.Value, Range(sListRngDesc), 0))
    End If
    Application.EnableEvents = True
End Sub

将此代码粘贴到要实现此目的的工作表的工作表模块中。 根据需要更改范围地址。此外,这可以通过动态数组,集合等来完成..但是这很简单:)