【问题标题】:How do I specify a variable Excel range?如何指定可变 Excel 范围?
【发布时间】:2011-06-03 23:27:41
【问题描述】:

我希望能够根据行/列变量在 Excel 中动态指定范围。

假设我有一个文件,其内容如下所示:

A B C D E 1 10 11 12 13 14 2 51 52 53 54 55

如果我想对第 1 行第 2-4 列中的项目求和(即 11 + 12 + 13),我该如何指定?

如果我手动输入,我会输入:

=SUM(B1:D1)

...但是我如何以编程方式即时生成该范围定义,只知道所需的行 (1) 和列号 (2-4)?

=SUM(????)

提前感谢您的帮助!

(我使用的是 Microsoft Excel 2011 for Mac,因此基于 Excel VBA/宏的解决方案不适合我。)

【问题讨论】:

    标签: excel worksheet-function excel-2011


    【解决方案1】:

    我也有同样的需求——看起来OFFSET 函数可以让你这样做。

    所以对于上面的:

    =SUM(OFFSET(A1,0,1,1,3))
    

    分解:

    OFFSET(reference cell,
           row offset from ref cell to start the range,
           col offset to start the range, height of range you want,
           width of range you want)
    

    如果需要,您可以将偏移设为零,或者 + 向下引用,- 向上引用

    【讨论】:

      【解决方案2】:

      这取决于如何引用“已知”行号和列号
      例如,如果它们是工作表上单元格中的值:

           A          B
       9   Row        1
      10   ColStart   1
      11   ColEnd     4
      

      使用INDRECT 函数构建范围引用

      =SUM(INDIRECT("R"&B9&"C"&B10&":R"&B9&"C"&B11,FALSE))
      

      【讨论】:

      • INDIRECT 必须尽可能避免。它是易变的,也就是说,每次任何单元格发生变化时都会重新计算。
      【解决方案3】:

      不确定你想要什么。
      你是这个意思吗?

      dim parent_range as range
      dim child_range as range
      
      set parent_range = me.range("a1:e2")
      set child_range = range(parent_range.rows(1).cells(2), parent_range.rows(1).cells(4))
      
      msgbox "=sum(" & child_range.address(false, false, xla1) & ")"
      

      或者你想要它作为一个公式?

      =SUM(INDEX($A$1:$E$2,1,2):INDEX($A$1:$E$2,1,4))
      

      【讨论】:

      • 感谢您的帮助,GSerg。不幸的是,我使用的是 Microsoft Excel 2011 for Mac,它不支持 Excel VBA 宏。我想我正在寻找一个纯 Excel 的解决方案。
      • @Anirvan 试试这个公式。
      • 这很奇怪,我已经为 Mac 的 Excel 2011 开发了宏,与 Windows 相比有一些怪癖,但在大多数情况下,一切都是一样的。如果您不能在 Excel 2011 for mac 中使用它,我会感到惊讶。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多