EXCEL VBA – 基于单元格区域和string创builddynamic下拉菜单

好的,所以我现在有一个从单独的工作表范围填充的下拉菜单。

我希望能够通过在每个值文本中添加具有来自另一个单元格的文本值的值来减less下拉列表中的值。

例如:单元格A1表示“表格”单元格A2是从范围内拉取值的下拉列表范围包括“表格”,“大表格”,“凳子”

目前下拉菜单会带来所有的值。 在这种情况下,我希望它能带来“桌子”和“大桌子”,因为他们都有“桌子”。

我的文件的一个例子可以在这里findhttp://www.filedropper.com/example_1

请帮忙..我正在把我的头发撕掉!

谢谢Mike

这里是没有VBA的一种方法:

(除非另有说明,否则所有的说明都要在表格上加上物品清单): 在这里输入图像说明

  1. search提供的文字。 在C2中,input=NOT(ISERROR(SEARCH('Choose Items'!$A$2,A2)))并复制
  2. 在D2中计数命中: =IF(C2,1,0) ,在D3中: =IF(C3,D2+1,D2) – 复制下来
  3. 创builddynamic列表:在F2:F9中,放置数字1-8。 在G2中,使用以下公式: =IFERROR(INDEX($A$2:$A$9,MATCH(F2,$D$2:$D$9,0)),IF(F2=1,"No match",""))并复制下来。
  4. 创build一个dynamic命名范围 – 在名称pipe理器( 公式 – > 名称pipe理器 )中,插入一个新名称ItemsDynamic并提供=OFFSET(Items!$G$2:$G$9,0,0,MAX(Items!$D$2:$D$9,1),1)作为公式。
  5. 使用新的ItemsDynamic作为下拉字段validation的来源

完成! 检查此文件的解决scheme。

这是一个更简单的答案。

先使用公式(对于C2)将辅助列中的“工作表”项目中的项目称为“C”列,然后填写。

 =IFERROR(RIGHT($A2,LEN($A2)-FIND(" ",$A2)),$A2) 

现在在“select项目”工作表中,对于单元格B2,使用以下内容作为validation列表的源代码 –

 =OFFSET(Items!$A$1,MATCH('Choose Items'!$A2,Items!$C$2:$C$10,0),,COUNTIF(Items!$C$2:$C$10,'Choose Items'!$A2),) 

您可以填充以将validation扩展到“B”列的其他行

如果“表项”中的数据需要扩展到10以上的行,则适当地改变偏移函数的匹配范围和countif函数以包含整个数据(在如前所述的“C”列中进行分组之后)。

确保表'Items'中的列表在助手列(升序或降序)上sorting,在这种情况下,列是“C”。