定义表的动态范围

时间:2017-02-22 16:02:56

标签: excel excel-formula

背景

在我想要定义覆盖整个桌子的动态范围的情况下,我经常发现自己很安静。我想要足够的灵活性,如果我添加更多的列或行或移动表,应该更新范围。

所以我的工作基本上是:

  • 为表格的左上角单元命名(start.table说)
  • 按如下方式定义表的动态范围:

      =OFFSET(start.table;0;0;
              COUNTA(INDIRECT(
                     SUBSTITUTE(ADDRESS(ROW(start.table);1);"$1";"") & ":" & 
                     SUBSTITUTE(ADDRESS(ROW(start.table);1);"$1";"")));
              COUNTA(INDIRECT(
                     SUBSTITUTE(ADDRESS(1;COLUMN(start.table));"$A";"") & ":" & 
                     SUBSTITUTE(ADDRESS(1;COLUMN(start.table));"$A";""))))
    

解释

  • ADDRESS为我提供了整个列/行的单元格start.table的字符串表示
  • 我需要SUBSTITUTE $1$A部分才能分别获得列或行限定符
  • 然后,我可以COUNTA INDIRECT字符串SUBSTITUTE范围内的非空单元格
  • 使用这种方法,表格保持正确定义,即使我在表格之前/之后添加空行或添加列或行

问题

这种方法似乎过于矫枉过正,我在想是否不能简单地分别用INDIRECT(...)$A:$A替换整个$1:$1构造。第一次测试会证实它有效,但我想知道我是否在这里忽略了什么?你觉得这种方法有什么潜在的问题吗?

1 个答案:

答案 0 :(得分:1)

这是我在名称管理器中用来定义动态表的方法:

=OFFSET(SheetName!$A$1,0,0,COUNTA(SheetName!$A:$A),COUNTA(SheetName!$1:$1))

这将涵盖您给定工作表上的所有行和列。