基于LOOKUP的数据validation

我有两张桌子。 表A和表B.

表A有以下三列:“属性ID”,“属性名称”和“价值”。 表A的示例行(表示新列的逗号):

  • “10000,长度,3M”
  • “10000,长度5M”
  • “10000,长度,7M”
  • “20000,深度,1,5M”
  • “20000,深度,3M”
  • “20000,深度,4,5M”

表B有以下三列:“产品编号”,“属性ID”和“值”表B中的示例行(代表新列的逗号):

  • “38-500351,10000,3M”

该工作表将被客户用来input数据,所以我想尽可能地简化和validation一切,以尽量减less错误。 目前客户手动input表B中的“价值”(例如3M)。

因此,如果在表B中input10000作为“属性ID”,那么只有“3M”,“5M”和“可以把“7M”作为价值。

我发现这个话题看起来很相似,但我一直无法弄清楚如何使用它。 任何帮助将非常感激。 如果可能的话,避免使用VBA。

我已经成功地适应了Axcel的答案。 这是修改后的代码,以适应我的工作表:

=INDEX('Attribut værdier'!$C:$C;MATCH(INDIRECT("RC[-2]";FALSE);'Attribut værdier'!$A:$A;0)):INDEX('Attribut værdier'!$C:$C;MATCH(INDIRECT("RC[-2]";FALSE);'Attribut værdier'!$A:$A;1)) 

我已经改变了“,”改为“;” 和图纸参考。 除此之外,我没有做任何改变,一切正常。

假设我们有这样的情况: 在这里输入图像说明

请注意,A列中的Attribut ID按升序sorting。

使用引用的名称pipe理器创build一个名为“ValueList”的名称

 =INDEX(Sheet1!$C:$C,MATCH(INDIRECT("RC[-1]",FALSE),Sheet1!$A:$A,0)):INDEX(Sheet1!$C:$C,MATCH(INDIRECT("RC[-1]",FALSE),Sheet1!$A:$A,1)) 

如何使用名称pipe理器,请参阅https://support.office.com/en-us/article/Define-and-use-names-in-formulas-4d0f13ac-53b7-422e-afd2-abd7ff379c64?ui=en-US&rs = EN-US&AD = US#bmmanage_names_by_using_the_name_manage

INDIRECT中的“RC [-1]”必须相应地更改为Excel的语言版本。 对于德语Excel,它必须是“ZS(-1)”。

这个命名的范围将dynamic地从第一次出现的“属性ID”到C列中最后一次出现“属性ID”的列C中获得范围。“属性ID”取自单元格左边的单元格被分配给。

然后,可以使用此命名范围作为Data Validation(Source = ValueList)中列表G的列中的下拉列表的源。