我有两个从数据库查询动态创建的表;第一个表是下拉列表的源,第二个表是我将通过数据验证应用下拉列表的表。第一张表:
和第二个表:
我所需要的,理想情况是通过Excel公式,是一个智能设计的下拉列表,仅显示与相关维度相关联的维度值。
因此在单元格B3:B10中,下拉列表将显示a,b,c。在单元格C3:C10中,下拉列表将显示1,2,3。在单元格D3:D10中,下拉列表将显示x,y,z。等等。
我需要这个是动态的,因为从现在起一周后我的数据库查询可能会返回需要遵循相同方法的第四个维度。
如果不写一些VBA,不确定这是否可能,但我想我会看到是否有人有任何创意。干杯!
答案 0 :(得分:0)
您必须使用Name Manager
和=INDIRECT()
公式来实现这一目标。
首先下载示例文件。
Sample File
请参阅此提示(由我)。它将帮助您逐步查看屏幕截图。 Link is here
现在,对于您的数据,您必须使用一些公式来在新数据到来时自动过滤数据。这样新数据就可以组织动态组合框。如果你不能那样做,我也可以帮你。然后与我分享您的样本工作簿。
答案 1 :(得分:0)
这很可能,但并不简单。有几种方法可以实现这一点,具体取决于您的要求,它需要的动态性以及数据的预期结构(正如我在评论中提到的那样)。
我将给出一个可能的解决方案,这个解决方案主要是动态的,并且是最简单的解释。您可以使用类似的逻辑使其全部动态化。
此解决方案将根据维度名称检索表#1中的数据(假设它未排序),并按表中给出的顺序返回值。
对于某些范围,我为了简单起见创建名称,有些是强制性的。为了遵循公式逻辑,您需要我使用的命名范围。
为表#1创建命名范围:(使用名称框或使用名称管理器Ctrl + F3):
在新工作表中创建维值列表:
="Customer"
中。 (可以动态创建可用的维度名称,但我正在跳过此部分以简化)。=IFERROR(INDEX(DimVal,SMALL(IF(DimName=B$2,ROW(DimName)-ROW(INDEX(DimName,1))+1),ROWS(B$3:B3)),1),"")
。此公式返回“客户”维度的第k个值。=SUMPRODUCT(--(B3:B10<>"")
计算可用值。为列表创建动态命名范围:(使用名称管理器Ctrl + F3)
设置表#2数据验证列表来源:
=OFFSET(INDEX(DimLists,,MATCH(B$2,DimListHeaders,0)),,,INDEX(DimListCount,,MATCH(B$2,DimListHeaders,0)))
。此公式根据表#2中的列标题在 DimLists 中查找正确的列表,并根据列表计数设置返回的范围高度。希望这有帮助。