Сводная статистика в Visual Basic - PullRequest
1 голос
/ 28 ноября 2011

Ниже я пытаюсь написать скрипт, целью которого является вычисление некоторой сводной статистики для нескольких разных столбцов чисел.Я получил некоторую помощь по этому вопросу до отметки «Нужна помощь ниже».Но помимо этого я поражен тем, как рассчитать простую статистику (сумма, среднее значение, стандартное отклонение, коэффициент вариации).Я знаю, что у VB есть сценарии для этой статистики, которые я включил в свой код, но я думаю, мне нужно сделать дополнительное объявление или что-то в этом роде.Совет очень ценится.Спасибо.

    Sub TOAinput()

    Const n As Integer = 648

    Dim stratum(n), hybrid(n), acres(n), hhsz(n), offinc(n)
    Dim s1 As Integer
    Dim s2 As Integer
    Dim i As Integer

    For i = 1 To n
    stratum(i) = Worksheets("hhid level").Cells(i + 1, 2).Value
    Next i

    s1 = 0
    s2 = 0
    For i = 1 To n
        If stratum(i) = 1 Then
        s1 = s1 + 1
        Else:
        s2 = s2 + 1
        End If
    Next i

    Dim acres1(), hhsz1(), offinc1(), acres2(), hhsz2(), offinc2()
    ReDim acres1(s1), hhsz1(s1), offinc1(s1), acres2(s2), hhsz2(s2), offinc2(s2)

    'data infiles: acres, hh size, off-farm income,

    For i = 1 To n
    acres(i) = Worksheets("hhid level").Cells(i + 1, 4).Value
    hhsz(i) = Worksheets("hhid level").Cells(i + 1, 5).Value
    offinc(i) = Worksheets("hhid level").Cells(i + 1, 6).Value
    Next i

    s1 = 0
    s2 = 0
    For i = 1 To n
        If stratum(i) = 1 Then
        s1 = s1 + 1
        acres1(s1) = acres(i)
        hhsz1(s1) = hhsz(i)
        offinc1(s1) = offinc(i)
        Else:
        s2 = s2 + 1
        acres2(s2) = acres(i)
        hhsz2(s2) = hhsz(i)
        offinc2(s2) = offinc(i)
        End If
    Next i

    '****************************
    'Need help below
    '****************************

    Dim sumac1, sumac2, mhhsz1, mhhsz2, cvhhsz1, cvhhsz2

    sumac1 = Sum(acres1)
    sumac2 = Sum(acres2)
    mhhsz1 = Average(hhsz1)
    mhhsz2 = Average(hhsz2)
    cvhhsz1 = StDev(hhsz1) / Average(hhsz1)
    cvhhsz2 = StDev(hhsz2) / Average(hhsz2)


    End Sub

1 Ответ

0 голосов
/ 28 ноября 2011

Sum, Average и StdDev являются функциями рабочего листа и не могут использоваться непосредственно в VBA.

Попробуйте

 MyInteger = Application.WorksheetFunction.Sum(MyIntegerArray)

если предложение Ника Сабба о размещении формул в ячейках неуместно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...