计算ChiSquare

时间:2016-08-17 17:20:32

标签: excel vba excel-vba chi-squared

我正在excel vba中编写用户定义的函数。所以这个新功能:

  1. 需要4个输入值
  2. 一些计算生成8个数字。 (2个数组 - 每个数组有4个数字)
  3. 进行chisquare测试
  4. 返回1输出值
  5. 代码:

    Sub test()
        Dim A, B, C, D As Variant
        A = 33
        B = 710
        C = 54
        D = 656
    
        'Observed Value
        Dim O_A As Variant
        Dim O_B As Variant
        Dim O_V As Variant
        Dim O_D As Variant
    
        'Define Observer Value
        O_C_A = 'Some Calucation'
        O_C_B = 'Some Calucation'
        O_T_C = 'Some Calucation'
        O_T_C = 'Some Calucation'
    
        'Expected Value
        Dim E_C_A As Variant
        Dim E_C_B As Variant
        Dim E_T_C As Variant
        Dim E_T_D As Variant
    
        'Define Expected Value
        E_C_A = 'Some Calucation'
        E_C_B = 'Some Calucation'
        E_T_C = 'Some Calucation'
        E_T_D = 'Some Calucation'
    
        'Create array(2x2)
        Dim Chi_square_result As Variant
    
        Dim my_array(1, 1)
        my_array(0, 0) = O_C_Mesaurement
        my_array(0, 1) = O_C_Balance
        my_array(1, 0) = O_T_Measurement
        my_array(1, 1) = O_T_Balance
    
        Dim my_array2(1, 1)
        my_array2(0, 0) = E_C_Mesaurement
        my_array2(0, 1) = E_C_Balance
        my_array2(1, 0) = E_T_Measurement
        my_array2(1, 1) = E_T_Balance
    
        'Create a chi square test formula'
        Dim formula(1 To 5) As String
        formula(1) = "CHITEST("
        formula(2) = my_array
        formula(3) = ","
        formula(4) = my_array2
        formula(5) = ")"
    
        'Chi Square
        Chi_square_result = evaluate(Join(formula, ""))
    end sub
    

    它给出了运行时错误'13',保存了类型不匹配。这是因为公式的连接。

2 个答案:

答案 0 :(得分:2)

如果您正在编写某个功能,则说明您的格式错误。

Function Chi_square_result(A as Long, B as Long, C as Long, D as Long) as Double
    'All your manipulations here

    Chi_square_result = (Your math equation)

End Function

你也从未定义my_array1,我假设它应该是你输入'my_array'的地方。我也不认为加入是你最好的选择。你正在尝试进行大量的数组操作,我认为你的维度正在吸引你。最好以更直接的方式做到这一点。

答案 1 :(得分:0)

评估期待工作表单元格范围。使用Excel Application objectWorksheetFunction object计算VBA中的功能。

证明了这一点。

Dim dbl As Double
Dim my_array1(1, 1)
my_array1(0, 0) = 1
my_array1(0, 1) = 2
my_array1(1, 0) = 3
my_array1(1, 1) = 4

Dim my_array2(1, 1)
my_array2(0, 0) = 2
my_array2(0, 1) = 3
my_array2(1, 0) = 4
my_array2(1, 1) = 5

dbl = Application.ChiTest(my_array1, my_array2)
Debug.Print dbl

VBE立即窗口的结果:0.257280177154182