我已经熟悉了 Excel 的address
函数,它接受两个整数,分别表示一行和一列,并返回对指定单元格的引用。例如,=address(2,4)
给出$d$2
。是否有内置的 Excel 函数可以对单元格区域执行address
对单个单元格执行的操作 - 类似于=func(2,4,6,8)
或 的函数,=func(address(2,4),address(6,8))
可以返回$d$2:$h$6
?
这些是我迄今为止失败的解决方法尝试:
=address(2,4):address(6,8)
:语法无效。=address(2,4)&":"&address(6,8)
:没有语法错误,但由于 Excel 将此公式的返回值视为字符串,因此其他函数无法将其用作范围引用。例如,=countif(address(2,4)&":"&address(6,8),">10")
实际上不会给出与相同的结果countif($d$2:$h$6,">10")
。
答案1
您可以使用 INDIRECT :
=countif(INDIRECT(address(2,4)&":"&address(6,8)),">10")
答案2
您还可以使用偏移函数:
=COUNTIF(OFFSET(D2,0,0,4,3), ">10")
定义从 D2 开始的 4 行 3 列范围。两个 0 可用于从 D2 移动起始位置,因此输入 D2,1 将移动到 D3 等...
答案3
如果您要Ron Rosenfeld's
使用计算动态填充答案中的参数,则可以使用以下方法避免通常令人讨厌的从列号到其字母的更改:
=INDEX(2:2,,4):INDEX(6:6,,8)
它给出相同的 D2:H6,但在范围部分使用数字作为列而不是字母。
(尽管有一种简单的方法来获取列字母,但似乎没人知道,并且默认使用令人讨厌的 26 除法等等。问题是,简单的方法仍然需要添加一点,而上面的方法则非常直接。)
答案4
常用的INDIRECT
and/orOFFSET
方法的一个问题是它们都是易失性函数。这意味着每当重新计算工作表时,它们都会重新计算,即使这样做不是必要的。在包含许多此类公式的大型工作表上,这可能会很耗时。
您可能最好使用非易失性INDEX
函数:
=INDEX($D:$D,2):INDEX($H:$H,6)
将返回对D2:H6
笔记 您需要了解以下几点:
所提供的各种公式对于在受影响范围内或之前插入或删除行或列会做出不同的反应。在某些情况下,它们将继续在新位置引用原始范围;在其他情况下则不会。