自动扩展Excel数组公式范围(不带宏) 问题

自动扩展Excel数组公式范围(不带宏) 问题,excel,excel-formula,Excel,Excel Formula,如何在手动向表中添加行时自动向数组公式中添加行?类似的功能似乎由Google Docs at提供,并在Excel中使用宏进行了调整。但是,使用此宏需要启用Microsoft脚本运行时,我不希望这样做,最终用户也很难维护它。我正在运行Excel 2013 我为可能不了解VBA或数组公式,但需要将项目添加到验证表(如下所述)的最终用户创建此工作表。当用户添加表行时,我的数据验证范围及其数组公式的长度不会自动增加,数据验证可能不再显示所有可接受的值 筛选数据验证的设置 您可以在禁用宏的情况下查看我的精

如何在手动向表中添加行时自动向数组公式中添加行?类似的功能似乎由Google Docs at提供,并在Excel中使用宏进行了调整。但是,使用此宏需要启用Microsoft脚本运行时,我不希望这样做,最终用户也很难维护它。我正在运行Excel 2013

我为可能不了解VBA或数组公式,但需要将项目添加到验证表(如下所述)的最终用户创建此工作表。当用户添加表行时,我的数据验证范围及其数组公式的长度不会自动增加,数据验证可能不再显示所有可接受的值

筛选数据验证的设置 您可以在禁用宏的情况下查看我的精简工作表。主表中“过程”列上的数据验证将仅显示验证表中“测试过程”列中当前显示的值。包括切片器以便于过滤

使用来自和其他一些来源的帮助,我创建了一个名为Main_HIGHLIGHT的表,其中包含数据验证,只允许第二个名为validation的表中的列的可见/过滤值

第二个表有三个相关列:可见、类别和测试过程。该表在Category列上使用切片器进行过滤,数据验证从testingprocess列返回值。三步流程用于防止过滤值出现在数据验证中:

  • 如果表格行被过滤掉,则可见列中的单元格显示为空白,如果未过滤掉,则显示测试过程的值。其公式为:
    =IF(聚合(3,5,[@[测试过程]])>0,[@[测试过程]],“”)
  • >P>一个直接指向表左边的数组公式,但不是表的一部分,从可见的范围取并排序它,使得所有空白单元格都在该范围的底部,并且所有具有值的单元格都在顶部。它填充宽度为1、高度等于表中条目数的范围。此范围的定义名称为Visible\u Tests\u,已删除\u filtered\u。与往常一样,使用Ctrl-Shift-Enter输入的公式是:

    =INDEX(Validation[Visible],
            SMALL(
                IF( Validation[Visible]<>"",
                        ROW(INDIRECT("$A$1:$A$"&COUNTA(Validation[Category]))),
                        ""
                ),
                ROW(INDIRECT("A1:A"&COUNTA(Validation[Category])))
            )
    )
    
    =索引(验证[可见],
    小的(
    如果(验证[可见]”,
    行(间接(“$A$1:$A$”&COUNTA(验证[类别])),
    ""
    ),
    行(间接(“A1:A”和COUNTA(验证[类别]))
    )
    )
    
  • 将创建一个定义的名称,即移除空白的可见测试,该名称仅包括移除过滤的可见测试的值,而不包括任何空白或错误。它的公式是:
    =偏移量(PPRNT!$A$34,0,0,匹配(“*”,可见的\u测试\u,删除了\u过滤的\u,-1),1)

  • 潜在解决方案 理想情况下,我希望将数组公式添加到验证表中,因为这样会在添加数组公式时自动将其复制到任何新行。然而,当我尝试这样做时,我得到一个错误,即“表中不允许使用多单元格数组公式。”

    或者,我可以将整个范围放在另一个定义的名称中,比如去掉空白的Visible_Tests_,其值实际上不在工作表的单元格中。我不知道


    如果其他方法都失败了,我可以使用上面链接的宏,但在我看来,这并不难,我可能只会在“如何”选项卡中包含扩展数组公式的说明。

    感谢@oldTurgy在正确方向上的凹凸

    这个三步过程为数据验证创建适当的列表,它是表的一部分,因此它会自动更新。请注意,我在原始问题中使用的CSE公式是多单元格(选择一组单元格,然后输入公式并按Ctrl-Shift-enter键),但表中不允许使用这些公式,因此此解决方案使用单单元格数组公式,该公式会自动复制到表中列中的每个单元格

  • 在表上创建一个可见列,以确定当前隐藏的行。这是一个普通公式,不是CSE公式。
    =IF(聚合(3,5,[@[测试过程]])>0,真,假)
  • 向表中添加一个筛选列表列,然后输入此单单元格CSE公式(该公式应自动复制到表中的其余单元格,就像任何其他表公式一样)。如果按Enter键而不是Ctrl-Shift-Enter键,您将获得#NUM!除第一个单元格外,所有单元格均出错

            =INDEX([Testing Process],
            SMALL(
                IF([Visible], ROW([Testing Process])-ROW(Validation[[#Headers],[Testing Process]]), ""),
                ROW([@[Testing Process]])-ROW(Validation[[#Headers],[Testing Process]])
            )
    )
    
  • 创建一个定义的名称,用公式
    =OFFSET(验证[[[标题],[筛选列表]],1,0,MATCH(“*”,验证[筛选列表],-1),1)
    处理数据验证(公式->定义名称),这样数据验证就不会有一堆#NUM!最后的错误

    在单元格上激活数据验证时,将“允许”设置为“列表”,并将“源”设置为
    =测试\u进程\u以进行数据\u验证


  • 就这样!这将根据表的筛选列创建一个自动展开的动态列表,并从该列表中删除空格和错误。

    您要查找的是一个动态命名范围。两者都显示了创建它们的不同方法。我使用Excel 2016,能够将CSE方程输入到表格中。不过,没有什么比您现在看到的更复杂的了。@我可以在Excel 2013的表格中输入单单元格CSE公式,但不能输入多单元格数组公式,如错误消息中所述。然而,你改变了我的想法,我得到了一个单细胞CSE公式,可以在表格中使用。请看下面我的答案。你能分享你的文件和公式应用于接受的答案吗?给你!在线预览不支持数据验证,因此您必须下载该文件才能看到它的运行情况。非常感谢。虽然你把它弄得很整洁