动态Excel公式

动态Excel公式,excel,excel-formula,formula,Excel,Excel Formula,Formula,我有一个主表,它为每种代码提供4种类型的代码和子表。我希望每个子表都有一个动态公式,以便在主表中输入任何新代码,该公式都会自动将新条目添加到相应的子表中 例如: 如果我在主表中的代码B旁边输入代码A,新代码将显示在子表A下及其info1和info2条目 我不是以英语为母语的人,所以我希望我的解释不会使事情复杂化 注:表格不限于三列 使用Insert>table将数据输入表格转换为Excel表格对象 现在您可以构建三个透视表来显示Info1和Info2。筛选每个数据透视表以分别显示代码A、B或C

我有一个主表,它为每种代码提供4种类型的代码和子表。我希望每个子表都有一个动态公式,以便在主表中输入任何新代码,该公式都会自动将新条目添加到相应的子表中

例如: 如果我在主表中的代码B旁边输入代码A,新代码将显示在子表A下及其info1和info2条目

我不是以英语为母语的人,所以我希望我的解释不会使事情复杂化


注:表格不限于三列

使用Insert>table将数据输入表格转换为Excel表格对象

现在您可以构建三个透视表来显示Info1和Info2。筛选每个数据透视表以分别显示代码A、B或C

在数据输入表中输入新数据时,使用数据>全部刷新,透视表将更新。您可以创建工作表更改事件,该事件将在数据输入表中的单元格更改时自动更新透视表

公式化方法只能通过使用数组公式预先填充固定范围来实现。在下面的屏幕截图中,选择了E列中的黄色单元格,输入了以下公式并用Ctrl-Shift-Enter确认:

=IFERROR(INDEX(B$1:B$20,SMALL(IF($A$1:$A$20=$E$1,ROW($A$1:$A$20)),ROW()-2)),"")
复制到F列

在H列中,公式为

=IFERROR(INDEX(B$1:B$20,SMALL(IF($A$1:$A$20=$H$1,ROW($A$1:$A$20)),ROW()-2)),"")
复制到第一栏

在K列中,公式为

=IFERROR(INDEX(B$1:B$20,SMALL(IF($A$1:$A$20=$K$1,ROW($A$1:$A$20)),ROW()-2)),"")
复制到L列

请注意,这些数组公式不允许编辑单个单元格。您将始终必须选择具有相同数组公式的所有单元格,进行编辑,然后使用Ctrl-Shift-Enter再次确认

一旦A到C列中的数据超出第20行,就需要相应地调整数组公式

这种方法不是很有效,因为无论数据输入列中存在多少行,预填充的公式都会进行计算

请注意,数组公式不应使用整列引用,因为这将大大降低工作簿的速度


如果设置正确,透视表方法将更加高效,需要更少的设置工作,并且无需维护

使用Insert>table将数据输入表格转换为Excel表格对象

现在您可以构建三个透视表来显示Info1和Info2。筛选每个数据透视表以分别显示代码A、B或C

在数据输入表中输入新数据时,使用数据>全部刷新,透视表将更新。您可以创建工作表更改事件,该事件将在数据输入表中的单元格更改时自动更新透视表

公式化方法只能通过使用数组公式预先填充固定范围来实现。在下面的屏幕截图中,选择了E列中的黄色单元格,输入了以下公式并用Ctrl-Shift-Enter确认:

=IFERROR(INDEX(B$1:B$20,SMALL(IF($A$1:$A$20=$E$1,ROW($A$1:$A$20)),ROW()-2)),"")
复制到F列

在H列中,公式为

=IFERROR(INDEX(B$1:B$20,SMALL(IF($A$1:$A$20=$H$1,ROW($A$1:$A$20)),ROW()-2)),"")
复制到第一栏

在K列中,公式为

=IFERROR(INDEX(B$1:B$20,SMALL(IF($A$1:$A$20=$K$1,ROW($A$1:$A$20)),ROW()-2)),"")
复制到L列

请注意,这些数组公式不允许编辑单个单元格。您将始终必须选择具有相同数组公式的所有单元格,进行编辑,然后使用Ctrl-Shift-Enter再次确认

一旦A到C列中的数据超出第20行,就需要相应地调整数组公式

这种方法不是很有效,因为无论数据输入列中存在多少行,预填充的公式都会进行计算

请注意,数组公式不应使用整列引用,因为这将大大降低工作簿的速度


如果设置正确,透视表方法将更加高效,需要更少的设置工作,并且无需维护

我提出了一个不包含索引的公式,但需要另一列作为一种“索引”

{=IFERROR(SMALL(IF($AB$11:$AB$100=$BG$9,$AJ$11:$AJ$100),$BB11),"")}

其中$BB11是第一个列表的数字1。工作起来很有魅力

我提出了一个不包含索引的公式,但需要另一列作为一种“索引”

{=IFERROR(SMALL(IF($AB$11:$AB$100=$BG$9,$AJ$11:$AJ$100),$BB11),"")}

其中$BB11是第一个列表的数字1。工作起来很有魅力

非常感谢,泰琳。我也在寻找不使用透视表的方法(可能是通过公式化)。公式很难。查找公式将只返回一个值。使用复杂的数组公式可能是可行的,但需要使用公式预先填充网格,以获得所需数据的行数。那总是很难看。我添加了一个公式化的方法绝对是棒极了!谢谢你,泰琳。:)我的错。当你公布答案时,我投了更高的票,但我忘了点击复选标记。谢谢你的信息。非常感谢,泰琳。我也在寻找不使用透视表的方法(可能是通过公式化)。公式很难。查找公式将只返回一个值。使用复杂的数组公式可能是可行的,但需要使用公式预先填充网格,以获得所需数据的行数。那总是很难看。我添加了一个公式化的方法绝对是棒极了!谢谢你,泰琳。:)我的错。当你公布答案时,我投了更高的票,但我忘了点击复选标记。谢谢你的信息。