ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 统计学中显著性T检验的VBA程序是如何编写的?

统计学中显著性T检验的VBA程序是如何编写的?

作者:绿色风 分类: 时间:2022-08-17 浏览:128
楼主
wise
Q:统计学中显著性T检验的VBA程序是如何编写的?
A:ALT+F11→插入模块→在模块输入以下代码:

  1. Sub Sig_test_v31()
  2. 'fix version by wise on 2008-09-24
  3. '
  4. Dim x(100, 100) As String
  5. Dim y(100, 100) As String
  6. Dim data As Range
  7.    
  8. Set data = Selection
  9. '如果是干净的数据则可以不需要下面这段代码
  10. '********************************************************************************************************
  11. For i = 3 To data.Rows.Count
  12. For j = 1 To data.Columns.Count
  13. ActiveSheet.Cells(1, 201).Clear
  14. ActiveSheet.Cells(1, 200).Value = data.Cells(i, j).Value
  15. ActiveSheet.Cells(1, 200).TextToColumns Destination:=Range("GR1"), DataType:=xlDelimited, _
  16.         TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
  17.         Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
  18.         :="(", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
  19. data.Cells(i, j).Value = ActiveSheet.Cells(1, 200).Value
  20. ActiveSheet.Cells(1, 200).Clear
  21. Next j
  22. Next i
  23. '********************************************************************************************************

  24. For a = 1 To data.Columns.Count - 1
  25. For b = a + 1 To data.Columns.Count
  26. base_a = data.Cells(1, a).Value
  27. base_b = data.Cells(1, b).Value
  28. For i = 3 To data.Rows.Count
  29. per_a = data.Cells(i, a).Value / 100
  30. per_b = data.Cells(i, b).Value / 100
  31. p_1 = (per_a * base_a + per_b * base_b) / (base_a + base_b)
  32. If p_1 * (1 - p_1) = 0 Or base_a <= 30 Or base_b <= 30 Then GoTo Lastline
  33. Sig = Abs(per_a - per_b) / Sqr(p_1 * (1 - p_1) * (1 / base_a + 1 / base_b))
  34. If Sig > 1.96 Then
  35.     If per_a > per_b Then
  36.     x(i, a) = x(i, a) + data.Cells(2, b).Value
  37.     Else
  38.     x(i, b) = x(i, b) + data.Cells(2, a).Value
  39.     End If
  40. ElseIf Sig > 1.645 Then
  41.     If per_a > per_b Then
  42.     y(i, a) = y(i, a) + LCase(data.Cells(2, b).Value)
  43.     Else
  44.     y(i, b) = y(i, b) + LCase(data.Cells(2, a).Value)
  45.     End If
  46. End If

  47. Lastline:
  48. Next i
  49. Next b
  50. Next a

  51. For i = 3 To data.Rows.Count
  52. For j = 1 To data.Columns.Count
  53. If x(i, j) <> "" Or y(i, j) <> "" Then
  54. data.Cells(i, j).Value = LTrim(Str(data.Cells(i, j).Value)) + "(" + x(i, j) + y(i, j) + ")"
  55. data.Cells(i, j).Characters(Start:=Len(data.Cells(i, j)) - 1 - Len(x(i, j)) - Len(y(i, j)), Length:=Len(data.Cells(i, j))).Font.ColorIndex = 7
  56. data.Cells(i, j).Characters(Start:=Len(data.Cells(i, j)) - 1 - Len(x(i, j)) - Len(y(i, j)), Length:=Len(data.Cells(i, j))).Font.Italic = True
  57. End If
  58. Next j
  59. Next i
  60. End Sub

2楼
eliane_lei
进来学习!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap