根据行号和列号获取单元格内容

96
我想根据行列号获取单元格的内容。行列号存储在单元格中(例如B1、B2)。我知道下面的解决方案可行,但感觉有些不太正规。
解决方案1:
=CELL("contents",INDIRECT(ADDRESS(B1,B2)))

Sol 2

=CELL("contents",OFFSET($A$1, B1-1,B2-1))

有没有更简洁的方法?例如 =CellValue(row,col) 或其他什么方法吗?

编辑/澄清:我只想使用Excel工作表公式,不想用VBA。简而言之,我要寻找与VBA Cells()方法相当的Excel公式。


我们能获取更多的上下文信息吗?你是只使用Excel公式吗?还是使用VBA?或者其他方法? - Saladin Akara
3个回答

142

您的公式中不需要CELL()部分:

=INDIRECT(ADDRESS(B1,B2))
或者
=OFFSET($A$1, B1-1,B2-1)

这两个函数都可以使用。请注意,INDIRECTOFFSET都是不稳定的函数。这类不稳定的函数会在每次重新计算时都进行计算,因此可能会拖慢计算速度。


这很有用,我希望看到它被编辑为正确数量的闭括号。 - Wyck
7
鉴于这个问题/答案的受欢迎程度,在这里简要说明一下 volatile function 是什么。 - LondonRob
请注意,使用第二种形式时,根据$a$1的具体情况,需要确保您在以后的表格编辑中不要对$a$1进行任何移动。 - Erk
INDIRECT + ADDRESS 是最好的方法。在我的语言中,Excel 将 OFFSET 翻译成由句点分隔的两个单词。这是最糟糕的(连同函数名称中的变音符号一起)! - Bitterblue

29

尝试使用 =index(数组, 行, 列)

其中: 数组:选择整个工作表 行、列:你的行和列引用

对于查看该公式的人来说,这应该更容易理解。


2

花费了一些时间,但是我已经将它变得动态化了。它不依赖于一个排序好的表格。

首先,我用一个州名的列(A列)和每个州飞机数量的列(B列)开始。(第一行是标题行)。

找到包含飞机数量的单元格是:

=MATCH(MAX($B$2:$B$54),$B$2:$B$54,0)+MIN(ROW($B$2:$B$54))-1

我将它放进一个单元格中,并给该单元格命名为“StateRow”。然后根据上述提示,最终得到了以下内容:

=INDIRECT(ADDRESS(StateRow,1))

这将从“StateRow”行,第1列的动态值中返回州名。

现在,随着计数列中的值随着输入更多数据而变化,我始终知道哪个州拥有最多的飞机。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接