Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于vlookup设置下拉值_Excel_Validation - Fatal编程技术网

Excel 基于vlookup设置下拉值

Excel 基于vlookup设置下拉值,excel,validation,Excel,Validation,我有一个工作表UserEntry,有两列,Block和Address。我想基于另一个具有相同列名的工作表Validation来验证这两个。验证表上的数据如下: Block | Address --------------- 001 | 101 001 | 101.3 001A | 35 020-1 | 203 020-1 | 203.5 020-1 | 204.1 ... 大约有11000个不同的块,大约40000个块/地址对 我的目标是,如果用户在UserEntry工作表的Blo

我有一个工作表
UserEntry
,有两列,
Block
Address
。我想基于另一个具有相同列名的工作表
Validation
来验证这两个。
验证
表上的数据如下:

Block | Address
---------------
001   | 101
001   | 101.3
001A  | 35
020-1 | 203
020-1 | 203.5
020-1 | 204.1

...
大约有11000个不同的块,大约40000个块/地址对

我的目标是,如果用户在
UserEntry
工作表的
Block
列中输入一个值,
Address
列中的下拉选项将更改为与该
Block
对应

我尝试对以下公式使用自定义验证:

=VLOOKUP(UserEntry!A2,Validation!A2:B40000)

但这被认为是一个错误。我在各种论坛上看到了一些解决方案,其中包括设置命名范围,然后使用VLOOKUP()搜索适当的命名范围,但在这里似乎不起作用,因为我必须创建11000个命名范围


如何使
地址
的验证下拉列表包括与给定
值对应的所有值

您可以为此使用动态命名范围

假设:

  • 验证列表按A..Z排序
  • 验证列表在范围
    验证中!A:B
  • 验证列表包括第1行中的标题
  • 在工作表
    UserEntry
    上,要验证的
    地址
    单元格是ented
    块右侧的一个单元格
  • 在Excel 2010上试用和测试
  • 创建一个命名范围以用作验证源(我使用了name
    ValList
    ):

    向所需单元格添加数据验证:允许
    列表
    ,源
    =ValList

  • 使用
    间接
    地址
    单元格
    获取相对于活动单元格的用户输入块的引用
  • 使用
    MATCH
    COUNTIF
    获取验证列表中匹配块的位置和大小
  • 使用
    OFFSET
    将返回范围设置为与输入块匹配的addreesses

  • 您可以为此使用动态命名范围

    假设:

  • 验证列表按A..Z排序
  • 验证列表在范围
    验证中!A:B
  • 验证列表包括第1行中的标题
  • 在工作表
    UserEntry
    上,要验证的
    地址
    单元格是ented
    块右侧的一个单元格
  • 在Excel 2010上试用和测试
  • 创建一个命名范围以用作验证源(我使用了name
    ValList
    ):

    向所需单元格添加数据验证:允许
    列表
    ,源
    =ValList

  • 使用
    间接
    地址
    单元格
    获取相对于活动单元格的用户输入块的引用
  • 使用
    MATCH
    COUNTIF
    获取验证列表中匹配块的位置和大小
  • 使用
    OFFSET
    将返回范围设置为与输入块匹配的addreesses

  • 您没有提到VBA,但这里有一个使用它的解决方案

    第一步 创建块地址关系的主表。确保已在
    块上对其进行排序
    。我使用了表1:

    单元格
    E2
    很重要。实际上,您不必在那里放置任何内容,但宏将使用它。单元格
    E3
    仅用于显示,但您将立即使用公式(此处已注释,以便您可以查看)

    步骤2 创建一个命名范围。
    中的公式引用:
    是您在上面的
    E3
    中看到的,您可以在这里看到对单元格
    E2
    的引用。方便你的公式是

    =OFFSET($A$1,MATCH($E$2,$A:$A,0)-1,1,COUNTIF($A:$A,$E$2),1)
    

    步骤3 设置一个新的工作表(表2),在其中输入数据。为
    地址
    列创建数据验证,如图所示

    步骤4 打开VBA编辑器并将此代码粘贴到
    工作表2的模块中。如果愿意,可以删除
    Debug
    语句。再次注意
    sheet 1
    上对单元格
    E2
    的引用:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Debug.Print "fired on " & ActiveCell.Address
      If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
        Sheets("Sheet1").Range("E2").Value = ActiveCell.Offset(0, -1).Value
      End If
    End Sub
    
    步骤5 享受。您的数据验证现在是上下文敏感的。示例:


    您没有提到VBA,但这里有一个使用它的解决方案

    第一步 创建块地址关系的主表。确保已在
    块上对其进行排序
    。我使用了表1:

    单元格
    E2
    很重要。实际上,您不必在那里放置任何内容,但宏将使用它。单元格
    E3
    仅用于显示,但您将立即使用公式(此处已注释,以便您可以查看)

    步骤2 创建一个命名范围。
    中的公式引用:
    是您在上面的
    E3
    中看到的,您可以在这里看到对单元格
    E2
    的引用。方便你的公式是

    =OFFSET($A$1,MATCH($E$2,$A:$A,0)-1,1,COUNTIF($A:$A,$E$2),1)
    

    步骤3 设置一个新的工作表(表2),在其中输入数据。为
    地址
    列创建数据验证,如图所示

    步骤4 打开VBA编辑器并将此代码粘贴到
    工作表2的模块中。如果愿意,可以删除
    Debug
    语句。再次注意
    sheet 1
    上对单元格
    E2
    的引用:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Debug.Print "fired on " & ActiveCell.Address
      If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
        Sheets("Sheet1").Range("E2").Value = ActiveCell.Offset(0, -1).Value
      End If
    End Sub
    
    步骤5 享受。您的数据验证现在是上下文敏感的。示例:


    我采用了这种方法,效果很好。谢谢你的详细解释,我采用了这种方法,效果很好。谢谢你的详尽解释。我选择了@andyholoday的解决方案,因为它需要更少的假设,因此足够灵活以满足我现有的需求。如果你仔细观察,你会发现它使用了相同的假设。关键的区别在于his使用VBA访问活动单元格,而我的使用
    单元格
    功能,这是一个非常复杂的问题