Kyl*_*rtz 8 excel dynamic excel-formula named-ranges
我在Excel中有一个表,其列标题对应于我的工作簿中其他位置的动态命名范围的一部分.例如,我有这些列标题:"10","20"等,并且这些动态命名区域:"ExampleRange10","ExampleRange2"等.我想输入一个VLOOKUP公式通过串联引用ExampleRange10字符串"ExampleRange"和列标题"10".这将允许我简单地在表中的所有列上扩展公式,而不是在每列的公式中手动键入"ExampleRange10","ExampleRange20"等.
我知道INDIRECT函数,并且在过去已成功使用它与命名范围,但在这种情况下它似乎不适用于动态命名范围.我猜这是一个细微差别与Excel如何定义动态命名范围有关(它们没有显示在公式栏左侧的命名区域下拉列表中,并且它们在VBA中有一些有趣的属性, 例如).有没有办法可以将INDIRECT公式与动态命名范围结合使用,还是有另外一种方法可以解决这个问题?
编辑:以下是使用的确切公式.
这是主要的公式:=VLOOKUP(B2,INDIRECT("ExampleRange"&C1),2,FALSE)其中C1包含"10",我称之为"ExampleRange10"动态命名区域的公式为:=OFFSET(Sheet1!$F$2,0,0,COUNTA(Sheet1!$F$2:$F$25),2).主公式返回"#REF!",但是当我删除动态命名范围公式并将"ExampleRange10"定义为静态范围时,它可以正常工作.
在进行进一步研究后,我可以告诉他,Excel的INDIRECT功能根本不适用于动态范围.可能有一种聪明的方式来绕过使用INDIRECT和坚持非VBA Excel世界,但我不知道这样的方式.相反,我最终创建了一个非常类似于此处描述的用户定义的函数.我改变了我的主要公式来读取=VLOOKUP(B2,DINDIRECT("ExampleRange"&C1),2,FALSE),DINDIRECT我创建的VBA函数的名称在哪里.
这个替代方案唯一的缺点(可能是也可能不是缺点,取决于你如何看待它)是工作簿必须保存为支持宏的工作簿,并且使用自定义函数不是非常自我记录和需要对其他用户进行一些解释.但考虑到所有事情,这对我来说是一个可以接受的解决方案.
对于链接厌恶,这是代码:
Public Function DINDIRECT(sName As String) As Range
Dim nName As Name
On Error Resume Next
Set nName = ActiveWorkbook.Names(sName)
Set nName = ActiveSheet.Names(sName)
On Error GoTo 0
If Not nName Is Nothing Then
Set DINDIRECT = nName.RefersToRange
Else
DINDIRECT = CVErr(xlErrName)
End Function
Run Code Online (Sandbox Code Playgroud)
注意:虽然这个解决方案有效,但我不会接受我的回答,因为我不想阻止其他人发布更好的解决方案.此外,我是网站的新手,很抱歉,如果我通过回答我自己的问题打破任何礼仪代码......我只是想我会分享我使用的确切解决方案,以防其他人发现它有用.
我最近碰到了这堵砖墙,您已经猜到的答案就是,您无法使用INDIRECT引用动态命名范围。
但是,您可以将动态范围公式本身用作INDIRECT的参数,但这对您要执行的操作没有用。PITA有点类似,因为它是一种非常有用的功能。