VBA,计算单元格的方差';s类型是字符串或布尔类型

VBA,计算单元格的方差';s类型是字符串或布尔类型,vba,excel,types,variance,Vba,Excel,Types,Variance,如何在VBA中跳过带有布尔值或字符串的单元格,我需要这一部分来计算方差,但如果我运行宏,并且列中有一个带有布尔值的单元格,则会显示错误num 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 s

如何在VBA中跳过带有布尔值或字符串的单元格,我需要这一部分来计算方差,但如果我运行宏,并且列中有一个带有布尔值的单元格,则会显示错误num 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

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

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
i=1至最后一行的

如果单元格(i,q).值为真,单元格(i,q).值为假,则_
IsNumeric(单元格(i,q).Value))然后
s=(单元格(i,q).Value-sred)^2
s_2=s_2+s
如果结束
接下来我

或者,您可以使用
工作表函数.VAR\u S
计算方差,就像计算平均值一样:

variance = WorksheetFunction.VAR_S(Range(Cells(1, q), Cells(LastRow, q)))
请注意,
VAR_S
VAR_p
的不同之处在于前者除以(n-1),而后者除以n<代码>变量是适合您的代码的。您还可以使用
STDEV_S
STDEV_P
获取标准偏差。此外,您在循环中计算的sum
s_2
可通过
DEVSQ
获得

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