在纯Excel中,如何引用范围中的列(不使用VBA)

6

我手上有一张数字范围表格,如何按索引引用完整的列或行?

我使用的是2007版Excel。我查阅了HLookup/Vlookup/Index等函数,但没有成功。

3个回答

12

我猜你的意思是在另一个公式中引用整个列/行作为范围/数组?

如果是的话,我能想到的唯一方法是使用OFFSET

=OFFSET($A:$A,,MyColIndex-1)
=OFFSET($1:$1,MyRowIndex-1,)

那是因为您的代码中有一个无限循环,导致CPU占用率飙升并最终导致系统崩溃。

=OFFSET(reference,rows,cols,[height],[width])

但是如果您在A的左侧插入列或在1上面插入行,则这种方法将不起作用。

编辑:刚刚找到了解决那个小问题的方法...

=OFFSET($A:$A,,MyColIndex-Column($A:$A))
=OFFSET($1:$1,MyRowIndex-Row($1:$1),)

4
如果您能将范围转换为表格,则可以使用结构化引用来引用表格中的列。
示例:
- 您的表格名为“Table1”,具有列“Column1”、“Column2”、“Column3” - 单元格“E1”中有一个列的名称(例如“Column1”)
在这种情况下,您可以计算指定为E1的列的总和。
=SUM(INDIRECT("Table1["& E1 &"]"))

如果您不熟悉它们,表格就像列表,但更加强大。在Excel 2007中,选择一定范围并按下“Ctrl-L”现在会创建一个表格而不是一个列表。 - stevepastelan
表格的选择不错,但你不需要使用间接函数。你可以直接使用=SUM(Table1[Header1]),其中Header1是列标题。如果可能的话,最好避免使用间接函数。 - Jesse
Jesse,如果你能在公式中硬编码Header1,那么这将起作用。但是,如果您想根据某个其他单元格的值指定列,则我只知道使用INDIRECT来实现... - stevepastelan

3
像这样的内容怎么样:
=SUM(INDEX(2:1048576,0,2))

这将对指定范围内的第二列进行求和,即B2:B1048576。它之所以有效是因为在index函数的行参数中输入0会返回指定范围内的整个列。以下代码将只对B2:B3进行求和:

=SUM(INDEX(2:3,0,2))

...这将求和C2:C3

=SUM(INDEX(B2:F3,0,2))

+1 做得好。Index函数可用于VBA数组的同一应用程序。 - brettdj
@brettdj,我不知道那个。那会非常方便。 - Doug Glancy
Doug,我在https://dev59.com/w1_Va4cB1Zd3GeqPVaUl中使用了这种技术来获取变量数组的两个切片。 - brettdj

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