Excel中至少有两种形式的公式。一个用于单元格,另一个用于数据验证。公式进行数据验证的最大长度限制大约只有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 ...
...
我想通过检查上面一行的值变化是否在其类别的一个sigma偏差范围内来验证这些值。这意味着我们需要跳过每个类别的第一行。
以下是我的尝试:
以下公式适用于从类别的第二行到最后一行开始的每个类别的单元格。
=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)
如果将公式输入到单元格中,这可以起作用,但它不适用于数据验证的引用公式。
要处理所有行的所有单元格(无需手动跳过每个类别的第一行),我编写了以下数据验证公式。但它给出了#34; FOrmula目前正在评估错误......&#34;因为excel的最大长度限制。
=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公式的长度限制是&#34; 8192&#34;但似乎不是这样: https://support.office.com/en-nz/article/Excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3
更新
以下是&#34;数据验证&#34;的公式的另一种尝试:
=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)))
奇怪的是,当我在单元格中输入时,上面公式的真/假值是正确的,但是当我在&#34;数据验证&#34;中输入它时。 - &gt;自定义 - &gt;式。结果完全错了。它总是给出错误。
答案 0 :(得分:3)
在Excel 2010中,您可以在数据验证公式中输入最多255个字符。
您可以简化公式以适应限制。
而不是使用:
INDIRECT(ADDRESS(ROW(), COLUMN()))
您可以简单地使用单元格相对地址。
选择例如B2:B50
并输入验证公式:
=IF($A2<>$A1,TRUE,B2-B1<STDEV.P(IF($A:$A=$A2,B:B)))
这应该等同于你的公式。
在其类别的一个西格玛偏差中
我认为您可能需要使用ABS(B2-B1)
而不是B2-B1
。
修改强>
您的屏幕截图证明我的公式未按预期运行:
请输入相同的公式,但请使用Ctrl
+ Shift
+ Enter
进行确认。现在它是一个数组公式,结果不同(10)。
您无法使用Ctrl
+ Shift
+ Enter
确认在数据验证字段中输入的公式,但您无需这样做。 Excel将数据验证中的每个公式解析为数组公式。
以下是应用了数据验证的示例数据的屏幕截图:
在右侧,您可以看到一个表格,其中包含所有单元格和每个类别的标准偏差。 圆形无效单元格选项会突出显示不符合条件的单元格。如您所见,每个类别都会有不同的偏差。