如何克服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的示例数据的屏幕截图:
在右侧,您可以看到一个标准差为所有单元格和每个类别的表格。 圆圈无效单元格选项突出显示不符合条件的单元格。 正如你可以看到不同的偏差适用于每个类别。