如何克服Excel中公式的最大长度限制? 一个Excel的错误?

Excel中至less有两种forms的公式。 一个用于单元格,另一个用于数据validation。 公式进行数据validation的最大长度限制大约只有210个字符。

这是我正在努力解决的一个问题。 给定一个包含类别和值的数据集

category value1 value2 a 1.0 ... a 2.0 a 1.0 a 3.0 b 1.0 b 5.0 b 2.0 ... ... 

我想通过检查上面一行的值是否在其类别的一个西格玛偏差之内来validation这些值。 这意味着我们需要跳过每个类别的第一行。

这是我试过的:

以下公式适用于每个类别的单元格,从第二行开始到其类别的最后一行。

 =INDIRECT(ADDRESS(ROW(), COLUMN())) - INDIRECT(ADDRESS(ROW()-1, COLUMN())) < 1.0*STDDEV.P(INDIRECT(ADDRESS(MATCH(INDIRECT("A" & ROW()), $A:$A, 0), COLUMN()) & ":" &ADDRESS(MATCH(INDIRECT("A"&ROW()),$A:$A, 1), COLUMN()))) 

但是,以下不起作用,因为在Excel中公式的最大长度限制 – 只需添加IF(formula_above,True,False):

 =IF(INDIRECT(ADDRESS(ROW(), COLUMN())) - INDIRECT(ADDRESS(ROW()-1, COLUMN())) < 1.0*STDDEV.P(INDIRECT(ADDRESS(MATCH(INDIRECT("A" & ROW()), $A:$A, 0), COLUMN()) & ":" &ADDRESS(MATCH(INDIRECT("A"&ROW()),$A:$A, 1), COLUMN()))), TRUE, FALSE) 

如果将公式input到单元格中,这可以工作,但它不适用于数据validation的引用公式。

为了处理所有单元格的所有行(不需要手工跳过每个类别的第一行),我写了下面的数据validation公式。 但是由于excel的最大长度限制,它给出了“FOrmula目前正在评估错误…”。

 =IF(MATCH(INDIRECT("A" & ROW()), $A:$A, 0) = ROW(), TRUE, INDIRECT(ADDRESS(ROW(), COLUMN())) - INDIRECT(ADDRESS(ROW()-1, COLUMN())) < 1.0*STDDEV.P(INDIRECT(ADDRESS(MATCH(INDIRECT("A" & ROW()), $A:$A, 0), COLUMN()) & ":" &ADDRESS(MATCH(INDIRECT("A"&ROW()),$A:$A, 1), COLUMN())))) 

虽然微软声称excel公式的长度限制是“8192”,但似乎并非如此: https : //support.office.com/zh-cn/article/Excel-specifications-and-limits-1672b34d-7043-467e -8e27-269d656771c3

更新:

以下是“数据validation”公式的另一个尝试:

 =IF($A2<>$A1, TRUE, abs(B2-B1)<Stdev.P(offset(indirect(address(match($A2,$A:$A,0), column())), 0,0,countif($A:$A, $A2,1))) 

奇怪的是,当我input一个单元格时,上面公式的真/假值是正确的,但是当我在“数据有效性” – >自定义 – >公式中input时,这个公式的真/假值是正确的。 结果是完全错误的。 它总是给虚假的。

在Excel 2010中,您可以在数据validation公式中input最多255个字符。

你可以简化你的公式,以适应限制。

而不是使用:

 INDIRECT(ADDRESS(ROW(), COLUMN())) 

您可以简单地使用单元格相对地址。

select例如B2:B50并inputvalidation公式:

 =IF($A2<>$A1,TRUE,B2-B1<STDEV.P(IF($A:$A=$A2,B:B))) 

这应该相当于你的公式。

在其类别的一个西格玛偏差之内

我认为你可能需要使用ABS(B2-B1)而不是B2-B1

编辑:

您的截图,以certificate我的公式不能按预期工作:

截图

请input相同的公式,但用Ctrl + Shift + Enter 。 现在是一个数组公式(10)。

您无法使用Ctrl + Shift + Enter确认在数据validation字段中input的公式,但您不需要这样做。 Excel将数据validation中的每个公式parsing为数组公式。

以下是应用了数据validation的示例数据的屏幕截图:

在这里输入图像说明

在右侧,您可以看到一个标准差为所有单元格和每个类别的表格。 圆圈无效单元格选项突出显示不符合条件的单元格。 正如你可以看到不同的偏差适用于每个类别。