我的问题很简单,但描述起来有些复杂。
我有四个单元格,其中包含四个整数,它们表示两个单元格的行号和列号。例如
A B
1 54 23
2 154 123
因此我们有两个单元格:
- 单元格 #1:第 54 行,第 23 列和
- 单元格 #2,第 154 行,第 123 列。
我想对单元格 #1 和单元格 #2 之间的所有单元格内容求和。当然,我需要引用单元格 A1、A2、B1、B2,其中包含相关值,而不是实际值。比如,我想把这个总和放在单元格 C3 中。
在 VBA 中它会很简单(尽管很长):
Range("C3").Cells = WorksheetFunction.Sum( _
Range(Cells(Cells(1,1),Cells(1,2)), _
Cells(Cells(2,1),Cells(2,2))))
如果没有 VBA 怎么办?
我尝试了类似的东西=SUM(ADDRESS(A1,B1),ADDRESS(A2,B2))
。我的问题是,使用 ADDRESS() 返回文本。如果我将此文本放入 SUM() 中,它会返回错误。
答案1
[已编辑 - 我最初误读了这个问题]
一种方法是使用函数OFFSET
来定位您想要的范围。
=SUM(OFFSET(A1,A1-1,B1-1,A2-A1+1,B2-B1+1))
OFFSET(A1,A1-1,B1-1)
表示一个单元格区域,其行号和列号分别为 A1 和 A2 中的值。最后两个参数(A2-A1+1
和B2-B1+1
)是新区域的行数和列数。
答案2
间接和地址是易失性的使用索引:
=SUM(INDEX(A:AAA,A1,B1):INDEX(A:AAA,A2,B2))
答案3
虽然看上去很管用,但效果并不好。
=SUM(INDIRECT(ADDRESS(ROW(INDIRECT("R"&A1&"C"&B1,FALSE)),COLUMN(INDIRECT("R"&A1&"C"&B1,FALSE)))):INDIRECT(ADDRESS(ROW(INDIRECT("R"&A2&"C"&B2,FALSE)),COLUMN(INDIRECT("R"&A2&"C"&B2,FALSE)))))
它将单元格内容转换为 R1C1 样式引用(即R54C23
)。然后,它将其转换为固定引用(即$W$54
)。然后,它将其用作间接引用插入SUM()
函数。