计算同一列中单元格之间相同文本值的标准差

时间:2015-03-21 17:39:30

标签: excel vba excel-vba excel-vba-mac

过去几天我一直在尝试在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
.....      ....    ...
.....      ....    ...

2 个答案:

答案 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))

enter image description here

答案 1 :(得分:0)

我将通过带有结构化引用的表向您展示我的意思。 我复制了textvalue列的数据。我还将标题Result添加到单元格C1

然后,我从“插入”功能区(在“表”选项卡上)中选择了“表”选项

Insert Table

然后我在C2中输入了这个公式作为数组公式,通过按住 ctrl + shift 确认它,同时按 Enter

=STDEVP(IF(Table1[[#This Row],[text]]=[text],[value],""))

Excel自动将该公式复制到最后一行并生成请求的结果。如果现在添加一行,表格将扩展(包括公式)。您还可以添加具有不同公式的列。

在上面的公式中,Table1[[#This Row],[text]]仅在包含公式的行上引用文本列的上下文,[text]本身引用整个文本列; [value]是指整个值列。

自动扩展以及使用实际列标签的功能是Excel表格和结构化引用的理想功能。它类似于具有动态命名范围,但更容易实现。

enter image description here