过去几天我一直在尝试在Excel中创建一个宏,它可以计算标准偏差,该标准偏差将从A列中不同单元格之间的相同文本值的B列获取值,并将结果提供给C列中的相应单元格。在我的工作表中,A列中有许多不同的文本值,B列中有相应的值。我想从列A中相应相同文本的第一行到最后一行获取B列的所有值,并计算这些值的标准偏差并在C列中显示结果。
例如,当它从第一个单元格(aass)开始时,它必须计算所有aass
并在计算标准偏差之后从列B的相应单元格中取值。请帮帮我。我很高兴收到你们的来信。我试图展示我的表格如何如下所示:
column A column B column C
text value result(standard deviation)
aass 112 35.16
aadd 243 12.9
ffdd 523 108.55
aass 198 35.16
aadd 252 12.9
aass 136 35.16
ffdd 342 108.55
ffdd 312 108.55
aadd 222 12.9
aadd 255 12.9
ffdd 322 108.55
aass 112 35.16
jjhgf 487 25.8
pouwe 565 6
jjhgf 451 25.8
jjhgf 424 25.8
qwert 643 0
pouwe 553 5
qwert 643 0
..... .... ...
..... .... ...
答案 0 :(得分:1)
这是我在没有VBA的情况下使用的。这是一个数组公式(使用 Ctrl + Shift + Enter 输入),它位于单元格C1中:
=STDEV(IF($A$1:$A$9=A1,$B$1:$B$9))
(在我的示例文件中,我只有9行数据。)
在较新版本的Excel中,您可以使用:
=STDEV.S(IF($A$1:$A$9=A1,$B$1:$B$9))
对于整个人口,请使用此:
=STDEVP(IF($A$1:$A$9=A1,$B$1:$B$9))
或
=STDEV.P(IF($A$1:$A$9=A1,$B$1:$B$9))
以下版本将是MUCH SLOWER:
=STDEV(IF(A:A=A1,B:B))
,=STDEV.S(IF(A:A=A1,B:B))
,
=STDEVP(IF(A:A=A1,B:B))
,=STDEV.P(IF(A:A=A1,B:B))
。
答案 1 :(得分:0)
我将通过带有结构化引用的表向您展示我的意思。
我复制了text
和value
列的数据。我还将标题Result
添加到单元格C1
。
然后,我从“插入”功能区(在“表”选项卡上)中选择了“表”选项
然后我在C2
中输入了这个公式作为数组公式,通过按住 ctrl + shift 确认它,同时按 Enter
=STDEVP(IF(Table1[[#This Row],[text]]=[text],[value],""))
Excel自动将该公式复制到最后一行并生成请求的结果。如果现在添加一行,表格将扩展(包括公式)。您还可以添加具有不同公式的列。
在上面的公式中,Table1[[#This Row],[text]]
仅在包含公式的行上引用文本列的上下文,[text]
本身引用整个文本列; [value]
是指整个值列。
自动扩展以及使用实际列标签的功能是Excel表格和结构化引用的理想功能。它类似于具有动态命名范围,但更容易实现。