Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 9392|回复: 10

VBA数组赋值 类型不匹配问题

[复制链接]
发表于 2012-5-25 13:50 | 显示全部楼层 |阅读模式
A = 2Do While A <= O / 2NPeriods = O / AReDim Array1(Int(NPeriods))ReDim Array2(A, NPeriods)ReDim S(Int(NPeriods))ReDim R(Int(NPeriods))RS = 0i = 1Do While i < NPeriodsmaxi = Array2(1, i)mini = Array2(1, i)For N = 1 To AIf Array2(N, i) > maxi Then maxi = Array(N, i)If Array2(N, i) < mini Then mini = Array2(N, i)R(i) = maxi - miniS(i) = Sqr(m / A)RS = RS + R(i) / S(i)i = i + 1Next NLoopO是样本总数,我想把计算出来的maxi和mini赋值到R和S数组中,但是总是提示类型不匹配,请问该如何编程呢?
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2012-5-25 13:51 | 显示全部楼层
  1. A = 2
  2. Do While A <= O / 2
  3. NPeriods = O / A
  4. ReDim Array1(Int(NPeriods))
  5. ReDim Array2(A, NPeriods)
  6. ReDim S(Int(NPeriods))
  7. ReDim R(Int(NPeriods))
  8. RS = 0
  9. i = 1
  10. Do While i < NPeriods
  11. maxi = Array2(1, i)
  12. mini = Array2(1, i)
  13. For N = 1 To A
  14. If Array2(N, i) > maxi Then maxi = Array(N, i)
  15. If Array2(N, i) < mini Then mini = Array2(N, i)

  16. R(i) = maxi - mini
  17. S(i) = Sqr(m / A)

  18. RS = RS + R(i) / S(i)
  19. i = i + 1
  20. Next N


  21. Loop
复制代码
回复

使用道具 举报

发表于 2012-5-25 14:03 | 显示全部楼层
你的A=2
跟while A<0/2 冲突,这代码直接没法运行的呀
0/2不知这到底是怎么个意思
回复

使用道具 举报

 楼主| 发表于 2012-5-25 14:10 | 显示全部楼层
zjcat35 发表于 2012-5-25 14:03
你的A=2
跟while A

哎…… 实在不好意思呵呵,编程的时候用的是O ,是“欧”,不是“0”嘿嘿……

回复

使用道具 举报

 楼主| 发表于 2012-5-25 14:11 | 显示全部楼层
O是样本总数,我想把计算出来的maxi和mini赋值到R和S数组中,但是总是提示类型不匹配,请问该如何编程呢?
回复

使用道具 举报

发表于 2012-5-25 14:12 | 显示全部楼层
但是你这里对O 没有进行赋值,它相当于也还是0
    还是你这代码不完整啊
回复

使用道具 举报

 楼主| 发表于 2012-5-25 14:17 | 显示全部楼层
zjcat35 发表于 2012-5-25 14:12
但是你这里对O 没有进行赋值,它相当于也还是0
    还是你这代码不完整啊

嗯,代码是截取的一部分,O是样本总数已经算出来了的哈{:011:}
回复

使用道具 举报

发表于 2012-5-25 14:18 | 显示全部楼层
没附件代码还不传完整,你让谁给你答案去!!!!  
回复

使用道具 举报

 楼主| 发表于 2012-5-25 14:22 | 显示全部楼层
zjcat35 发表于 2012-5-25 14:18
没附件代码还不传完整,你让谁给你答案去!!!!
  1. Sub Hurst()
  2. Dim Data()
  3. Dim Array1()
  4. Dim Array2()
  5. Dim R()
  6. Dim S()
  7. Dim Result()

  8. Dim O As Integer
  9. Dim Plot As Integer
  10. Dim NPeriods
  11. Dim PeriodNo
  12. Dim N As Integer
  13. Dim A As Integer
  14. Dim i As Long

  15. Dim m
  16. Dim e
  17. Dim RS

  18. Worksheets("Sheet1").Range("B3").Value = "Hurst="

  19. Do While i < 10000
  20. i = i + 1
  21. If Worksheets("sheet1").Cells(i, 1).Value = 0 Then Exit Do
  22. Loop
  23. O = i - 1

  24. ReDim Data(O)

  25. i = 1
  26. counter = 1

  27. Do While counter < O
  28. Set curCell = Worksheets("Sheet1").Cells(i, 1)
  29. If Application.WorksheetFunction.IsNumber(curCell.Value) Then
  30. Data(counter) = curCell.Value
  31. counter = counter + 1
  32. End If

  33. i = i + 1
  34. Loop


  35. ReDim Result(O / 2, 2)
  36. A = 2
  37. Do While A <= O / 2
  38. NPeriods = O / A
  39. ReDim Array1(Int(NPeriods))
  40. ReDim Array2(A, NPeriods)
  41. ReDim S(Int(NPeriods))
  42. ReDim R(Int(NPeriods))
  43. RS = 0

  44. Do While i < NPeriods
  45. e = 0
  46. For PeriodNo = 1 To A
  47. e = e + Data(PeriodNo + (i - 1) * A)
  48. Next PeriodNo
  49. Array1(i) = e / A
  50. i = i + 1
  51. Loop


  52. i = 1
  53. Do While i < NPeriods
  54. m = 0
  55. e = 0
  56. For PeriodNo = 1 To A
  57. m = m + ((Data(PeriodNo + (i - 1) * A) - Array1(i)) ^ 2)
  58. e = e + (Data(PeriodNo + (i - 1) * A) - Array1(i))
  59. Array2(PeriodNo, i) = e
  60. Next PeriodNo

  61. maxi = Array2(1, i)
  62. mini = Array2(1, i)
  63. For N = 1 To A
  64. If Array2(N, i) > maxi Then maxi = Array(N, i)
  65. If Array2(N, i) < mini Then mini = Array2(N, i)

  66. R(i) = maxi - mini
  67. S(i) = Sqr(m / A)

  68. RS = RS + R(i) / S(i)
  69. i = i + 1
  70. Next N



  71. Loop

  72. Result(A, 1) = Log(A)
  73. Result(A, 2) = Log(RS / NPeriods)
  74. A = A + 1
  75. Loop

  76. sumx = 0
  77. sumy = 0
  78. sumxy = 0
  79. sumxx = 0

  80. Plot = O / 2
  81. For i = 2 To Plot
  82. sumx = sumx + Result(i, 1)
  83. sumy = sumy + Result(i, 2)
  84. sumxy = sumxy + (Result(i, 1) * Result(i, 2))
  85. sumxx = sumxx + (Result(i, 1) * Result(i, 1))
  86. Next i

  87. h = (sumxy - ((sumx * sumy) / Plot)) / (sumxx - ((sumx * sumx) / Plot))
  88. Worksheets("sheet1").Range("c3").Value = h

  89. End Sub
复制代码

新来的不懂规矩,Sorry啊Sorry
回复

使用道具 举报

发表于 2012-5-25 18:37 | 显示全部楼层
spacegoing 发表于 2012-5-25 14:22
新来的不懂规矩,Sorry啊Sorry

最好连附件一起,不然不知道你的数据格式啊什么的,也不好办哦!

有附件,有代码,问题很好解决的!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-22 13:58 , Processed in 0.377772 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表