Arrays 如何引用变量范围

Arrays 如何引用变量范围,arrays,excel,excel-formula,Arrays,Excel,Excel Formula,我想在excel工作表中引用可变范围的数据范围。表示本月数据有80行,但下个月可能有100行。所以我只想要一个方法来引用变量范围的范围。所以我可以在下面的公式中使用这个方法:- =SUMPRODUCT(Allocation_Updt!$J$2:$J$83*((RIGHT(Allocation_Updt!$F$2:$F$83,6)+0)=$E62))/100 这里是数据表的最后一行。但下次可以改变。将其设置为10000(几乎是我数据的最大限制)将给我带来错误。使用 match(1e99, All

我想在excel工作表中引用可变范围的数据范围。表示本月数据有80行,但下个月可能有100行。所以我只想要一个方法来引用变量范围的范围。所以我可以在下面的公式中使用这个方法:-

=SUMPRODUCT(Allocation_Updt!$J$2:$J$83*((RIGHT(Allocation_Updt!$F$2:$F$83,6)+0)=$E62))/100
这里是数据表的最后一行。但下次可以改变。将其设置为10000(几乎是我数据的最大限制)将给我带来错误。

使用

match(1e99, Allocation_Updt!$J:$J)
。。。查找列中最后一个数字或日期的行号。对于J83中的最后一个值,以下三个范围引用都是相同的

Allocation_Updt!$J$2:$J$83
Allocation_Updt!$J$2:index(Allocation_Updt!J:J, match(1e99, Allocation_Updt!$J:$J))
index(Allocation_Updt!J:J, 2)):index(Allocation_Updt!J:J, match(1e99, Allocation_Updt!$J:$J))
因此,您可以动态地限制在所需的范围内

=SUMPRODUCT(Allocation_Updt!$J$2:index(Allocation_Updt!$J:$J, match(1e99, Allocation_Updt!$J:$J))*((RIGHT(Allocation_Updt!$F$2:index(Allocation_Updt!$F:$F, match(1e99, Allocation_Updt!$J:$J)),6)+0)=$E62))/100
请注意,第J列中的最后一行号用于获取第F列和第J列中的最后一个有效条目

鉴于SUMPRODUCT的挑剔性,我可能会使用

=sumifs(Allocation_Updt!$J:$J, Allocation_Updt!$F:$F, "*"&$E62)/100
这不是“最右边的6个字符匹配”;这是一场“以E62结束”的比赛。对您自己的数据进行一些测试将很快证明这是否是一个可行的替代方案。它更高效、更宽容,并且您可以使用完整的列引用而不受惩罚。

使用

match(1e99, Allocation_Updt!$J:$J)
。。。查找列中最后一个数字或日期的行号。对于J83中的最后一个值,以下三个范围引用都是相同的

Allocation_Updt!$J$2:$J$83
Allocation_Updt!$J$2:index(Allocation_Updt!J:J, match(1e99, Allocation_Updt!$J:$J))
index(Allocation_Updt!J:J, 2)):index(Allocation_Updt!J:J, match(1e99, Allocation_Updt!$J:$J))
因此,您可以动态地限制在所需的范围内

=SUMPRODUCT(Allocation_Updt!$J$2:index(Allocation_Updt!$J:$J, match(1e99, Allocation_Updt!$J:$J))*((RIGHT(Allocation_Updt!$F$2:index(Allocation_Updt!$F:$F, match(1e99, Allocation_Updt!$J:$J)),6)+0)=$E62))/100
请注意,第J列中的最后一行号用于获取第F列和第J列中的最后一个有效条目

鉴于SUMPRODUCT的挑剔性,我可能会使用

=sumifs(Allocation_Updt!$J:$J, Allocation_Updt!$F:$F, "*"&$E62)/100

这不是“最右边的6个字符匹配”;这是一场“以E62结束”的比赛。对您自己的数据进行一些测试将很快证明这是否是一个可行的替代方案。它更高效、更宽容,而且您可以使用完整的列引用而不会受到惩罚。

尝试将数据范围转换为表。它将自动为每一列应用一个名称。这些列名可用于引用列中的数据,该数据范围将是动态的

尝试将数据范围转换为表格。它将自动为每一列应用一个名称。这些列名可用于引用列中的数据,该数据范围将是动态的

实际上,我可能会将E62值转换为文本,而不是将右侧(…,56)转换为数字。SUMPRODUCT很容易被无法转换为数字的文本扼杀,但实际上没有任何数字无法转换为文本。大量的投票和喜欢你的人。这两种解决方案对我来说都很好。实际上,我可能会将E62值转换为文本,而不是将右(…,56)转换为数字。SUMPRODUCT很容易被无法转换为数字的文本扼杀,但实际上没有任何数字无法转换为文本。大量的投票和喜欢你的人。这两种解决方案对我来说都很好。很抱歉,我无法对数据布局进行任何更改。很抱歉,我无法对数据布局进行任何更改