VBA,如果单元格的类型是字符串或布尔值,则计算方差

时间:2017-05-27 18:24:01

标签: vba excel-vba types variance excel

如何在VBA中使用布尔值或字符串跳过单元格,我需要此部分来计算方差,但是如果我运行宏并且列有一个布尔值的单元格则显示错误数字13

Dim i As Integer
Dim q As Integer
q = InputBox("Variance of which column do you need?")

Dim LastRow As Integer
LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Dim sred As Long
sred = WorksheetFunction.Average(Range(Cells(1, q), Cells(LastRow, q)))

Dim s As Double
Dim s_2 As Double



For i = 1 To LastRow
s = (Cells(i, q).Value - sred) ^ 2
s_2 = s_2 + s
Next i

variance = (s_2 / (LastRow - 1))

MsgBox variance

2 个答案:

答案 0 :(得分:1)

只需检查单元格是否有数字

For i = 1 To LastRow
    If Cells(i, q).Value <> TRUE And Cells(i, q).Value <> FALSE And _
    IsNumeric(Cells(i, q).Value)) Then
        s = (Cells(i, q).Value - sred) ^ 2
        s_2 = s_2 + s
    End If
Next i

答案 1 :(得分:1)

或者,您可以使用variance = WorksheetFunction.VAR_S(Range(Cells(1, q), Cells(LastRow, q))) 来计算差异,就像您对平均值所做的那样:

VAR_S

请注意VAR_PVAR_S的区别在于前者除以(n-1)而第二除以n。 STDEV_S适合您的代码。您还可以使用STDEV_Ps_2来获得标准偏差。此外,您在循环中计算的总和DEVSQ是使用:person_name获得的。

以上所有函数在计算时会自动忽略目标范围内的非数字值。