【发布时间】:2016-08-23 19:07:51
【问题描述】:
问题
如何在手动向表中添加行时自动向数组公式中添加行? Google Docs 在https://support.google.com/docs/answer/3093275?rd=1 似乎提供了类似的功能,并且在http://www.wilmott.com/messageview.cfm?catid=10&threadid=62734 上有一个宏适用于Excel。但是,使用此宏需要启用 Microsoft Scripting Runtime,我不希望这样做,而且最终用户也难以维护。我正在运行 Excel 2013。
我正在为可能不了解 VBA 或数组公式但需要将项目添加到 Validation 表(如下所述)的最终用户创建此工作表。随着用户添加表格行,我的数据验证范围及其数组公式不会自动增加长度,并且数据验证可能不再显示所有可接受的值。
过滤数据验证设置
您可以查看我的精简工作表,其中禁用了宏here。 Main 表中 Process 列的数据验证将仅显示当前显示在 Validation 表的 Testing Process 列中的值。包含切片器以便于过滤。
使用来自http://www.contextures.com/xlDataVal02.html 和其他一些来源的帮助,我创建了一个名为 Main_HIGHLIGHT 的表,其中的数据验证只允许在名为 的第二个表中的列的可见/过滤值验证。
第二个表有三个相关的列,Visible、Category和Testing Process。该表使用 Category 列上的切片器进行过滤,数据验证从 Testing Process 列返回值。使用三步流程来防止过滤后的值出现在数据验证中:
- 如果表格行被过滤掉,Visible 列中的单元格显示空白,如果没有过滤掉,则显示Testing Process 的值。其公式为:
=IF(AGGREGATE(3, 5,[@[Testing Process]])>0,[@[Testing Process]],"") -
直接在表格左侧但不是表格一部分的数组公式从可见中获取范围并对其进行排序,以使所有空白单元格都位于范围的底部,并且所有具有值的单元格都在顶部。它填充宽度为 1 且高度等于表中条目数的范围。这个范围被赋予了定义名称Visible_Tests_with_filtered_removed。像往常一样用 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]))) ) ) 创建的定义名称 Visible_Tests_with_blanks_removed 仅包含 Visible_Tests_with_filtered_removed 中的值,不包含任何空白或错误。其公式为:
=OFFSET(PPRNT!$A$34,0,0,MATCH("*",Visible_Tests_with_filtered_removed,-1),1)
可能的解决方案
理想情况下,我想将数组公式添加到 Validation 表中,因为这会在添加数组公式时自动将数组公式复制到任何新行。但是,当我尝试这样做时,我收到“表格中不允许使用多单元格数组公式”的错误。
或者,也许我可以将整个范围放入另一个定义名称中,例如 Visible_Tests_with_blanks_removed,其值实际上并不位于工作表上的单元格中。我不知道
如果所有其他方法都失败了,我可以使用上面链接的宏,但在我看来它不应该这么难,我可能只是在 HowTo 选项卡中包含扩展数组公式的说明。
【问题讨论】:
-
我正在使用 Excel 2016,并且能够将 CSE 方程输入到表格中。然而,没有什么比你所看到的更复杂了。
-
@OldUgly 我可以将单单元格 CSE 公式输入到 Excel 2013 的表格中,但不能输入 多单元格 数组公式,如错误消息中所述。然而,你慢跑了我的想法,我得到了一个可以在表格中使用的单细胞 CSE 公式。请参阅下面的答案。
标签: excel excel-formula