[算表] vba循环问题

楼主: nazomegami (深呼吸~)   2016-04-23 08:57:12
软件:excel vba
版本:2010
各位版大好,以下有一vba程式,目的是要抓取3万笔左右的交易价格进行统计分析(交易
价格可随机设为1000~10000之间的值)。
我的问题是,程式中有一段 For zzz = 0.95 To 1 Step k_gap,如果我将0.95改为0.9,
则原本百分比介于0.95~1的资料就没有跑出来,可是做循环时zzz却会取到1,觉得很困惑
,系望各位大大解惑,谢谢。
Sub slope_analysis()
Dim k_gap, percentile_lbound_value, percentile_ubound_value
Dim ary0(33000), ary1(33000), ary2(33000), ary3(3500), ary4(3500), _
ary5(30), ary6(30), ary7(500, 3)
Dim i&, j&, k&, m&, n&, p&
'60=3个月;120=6个月;180=9个月;250=1年;500=2年;750=3年;1000=4年;_
1250=5年
'1500=6年;1750=7年;2000=8年;2250=9年;2500=10年
k_gap = 0.05
j = 1
For i = 1 To 33000
If Cells(6 + i, 5) <> "" Then
ary0(j) = Cells(6 + i, 5)
j = j + 1
End If
Next
'zzz=百分比上限;xxx=历史天数;yyy=未来天数
For zzz = 0.95 To 1 Step k_gap
For xxx = 250 To 2500 Step 250
n = 0
Erase ary5, ary6
For yyy = 625 To 1250 Step 125
'若第i日前x天且后y天不超过资料范围,则分别写入第i日前x天与 _
后y天的报酬率
k = 0
m = 0
Erase ary1, ary2, ary3, ary4
For i = 1 To j - 1
If i - xxx > 0 And i + yyy <= j - 1 Then
ary1(i) = (ary0(i) - ary0(i - xxx)) / ary0(i - xxx)
ary2(i) = (ary0(i + yyy) - ary0(i)) / ary0(i)
k = k + 1
End If
Next
'求得历史报酬率样本中第i个百分比之下限值与第j个百分比之上限值
If zzz - k_gap = 0 Then
percentile_lbound_value = WorksheetFunction.Min(ary1)
Else
percentile_lbound_value = _
WorksheetFunction.Percentile(ary1, zzz - k_gap)
End If
If zzz = 1 Then
percentile_ubound_value = WorksheetFunction.Max(ary1)
Else
percentile_ubound_value = _
WorksheetFunction.Percentile(ary1, zzz)
End If
'将历史报酬率在百分比上下限内之值写入
For i = 1 + xxx To k + xxx
If ary1(i) > percentile_lbound_value And ary1(i) <= _
percentile_ubound_value Then
ary3(m) = ary1(i)
ary4(m) = ary2(i)
m = m + 1
End If
Next
ary5(n) = WorksheetFunction.Correl(ary3, ary4)
ary6(n) = n + 1
n = n + 1
Next yyy
ary7(p, 0) = zzz - k_gap
ary7(p, 1) = zzz
ary7(p, 2) = xxx
ary7(p, 3) = WorksheetFunction.Slope(ary5, ary6)
p = p + 1
Next xxx
Next zzz
For i = 0 To 500
Cells(6 + i, 9) = ary7(i, 0)
Cells(6 + i, 10) = ary7(i, 1)
Cells(6 + i, 11) = ary7(i, 2)
Cells(6 + i, 12) = ary7(i, 3)
Next
End Sub
作者: soyoso (我是耀宗)   2016-04-23 09:56:00
改为0.9,zzz的值依序为0.9、0.95、1http://imgur.com/212dYW4而0.95~1的资料没有出来方面,这方面的判断是写于宏内的那个部分呢?
楼主: nazomegami (深呼吸~)   2016-04-23 10:39:00
在for i=1 to 500 那一段我会将结果写如cells中
作者: soyoso (我是耀宗)   2016-04-23 11:06:00
for i=1 to 500是指?只有看到for i=0 to 500如是i=0 to 500这段的话,ary7内是否0.95~1的资料就无存在无存在的话,往前看这方面的判断是写于宏内的那个部分
楼主: nazomegami (深呼吸~)   2016-04-23 19:59:00
是for i=0 to 500没错问题出在zzz数到1之后却没有继续往下做,所以才觉得很奇怪
作者: soyoso (我是耀宗)   2016-04-23 20:02:00
那这方面还是提供档案,应会比较清楚
楼主: nazomegami (深呼吸~)   2016-04-24 09:36:00
不好意思,我要如何寄档案给你呢? 谢谢!
作者: soyoso (我是耀宗)   2016-04-24 09:51:00
可放置云端空间,再贴连接
楼主: nazomegami (深呼吸~)   2016-04-24 11:51:00
https://drive.google.com/file/d/0By1rG_0drdV2cUc2ZG5mbk8yQWs/view?usp=sharing连结如上,上下两行都是,谢谢。
作者: soyoso (我是耀宗)   2016-04-24 12:33:00
提供的档案和原文不同所述不同,要以那个为主呢?档案看到的为function抱歉,有看到sub于sheet1内将变量zzz宣告为single,测试有跑出0.95~1的值http://imgur.com/XA6oJIz
楼主: nazomegami (深呼吸~)   2016-04-24 21:18:00
已测试成功,谢谢!但如果是 for zzz=0.05 to 1 step 0.05的话,zzz=1的情境又没有结果跑出来
作者: soyoso (我是耀宗)   2016-04-24 22:05:00
那改为整数for zzz=5 to 100 step 5,循环内有使用变量zzz再除100 http://imgur.com/SZGp4wM宣告上可调整为integer
楼主: nazomegami (深呼吸~)   2016-04-25 07:30:00
已排除问题,谢谢!

Links booklink

Contact Us: admin [ a t ] ucptt.com