按承诺更新:
当您使用列表进行验证时,您必须输入一个范围,如下所示。
该OFFSET
函数允许根据其输入标准动态设置范围。
如果你考虑这个:
=OFFSET(C1,0,0,1,1)
- 参数 1 = 锚单元
- 参数 2 = 要移动的行数,您可以在此处使用负数向上移动行,使用正数向下移动
- 参数 3 = 要移动的列数。左边是负极,右边是正极。
- 参数 4 = 范围的高度(不能为负数,可选,默认为 1)
- 参数 5 = 范围的宽度(不能为负数,可选,默认为 1)
在这种情况下,返回的范围将是C1
因为我们没有行或列偏移,并且高度和宽度设置为 1
该MATCH
函数将返回一个值出现在单元格范围内的位置的索引(范围必须是 1 个单元格宽或 1 个单元格高)
根据上面的屏幕打印=MATCH("Group2",D1:F1,0)
将返回 2,因为“Group2”出现在D1:F1
范围内的第二个单元格中。(“Group1”将返回 1,“Group3”将返回 3,“Group4”将返回 #N/A,因为它不存在)。
因此,基于此,我们可以将MATCH
函数作为函数中的第二个参数放入OFFSET
,并选择与函数中第一个参数匹配的列MATCH
。
=OFFSET(C1,0,MATCH("Group2",D1:F1,0),1,1)
将返回范围E1
,因为我们已经将列移动了 2,C1
因为MATCH
=OFFSET(C1,1,MATCH("Group2",D1:F1,0),3,1)
现在将返回E2:E4
,因为我们将范围的高度增加到 3 并将行偏移量增加到 1。
最后,我们可以将函数中的“Group2”值更改MATCH
为单元格值,这意味着范围将动态变化。
在这里,我使用了 Cell A2
=OFFSET(C1,1,MATCH(A2,D1:F1,0),3,1)
,因此单元格中的任何值都A2
将用于偏移范围。
最后要做的就是将动态范围放入验证中(我用过B2
)
这将动态设置验证范围。
当我使用OFFSET
具有多个参数的函数并且我不确定它是否返回正确的范围时,我编写了一个小助手用户定义函数,我只是将它放入 VBA 模块中。
Public Function GetAddress(rng As Range) As String
GetAddress = rng.Address
End Function
这允许我输入偏移公式,它会返回范围地址。所以我可以确保它是正确的。
可能有一个内置函数,但我从来没有找到它。