Excel 我如何避免;下标超出范围?
我对“下标超出范围”错误消息有问题。我得到了一些帮助,编写了一个循环一长串股票的代码。该代码基本上生成了所有向量,因此我可以在面板数据设置中使用它 循环在4个股票之后停止,并给我一个“下标超出范围”错误。 我可以在前95个“I”上运行代码,即如果我转换第一部分:Excel 我如何避免;下标超出范围?,excel,vba,loops,fill,Excel,Vba,Loops,Fill,我对“下标超出范围”错误消息有问题。我得到了一些帮助,编写了一个循环一长串股票的代码。该代码基本上生成了所有向量,因此我可以在面板数据设置中使用它 循环在4个股票之后停止,并给我一个“下标超出范围”错误。 我可以在前95个“I”上运行代码,即如果我转换第一部分: For i = 4 To 95 If Cells(i, 1) <> Cells(i - 1, 1) Then Clean_Stock_2 (i) 用于i=4到95 如果单元格(i,1)单元格(i-1,1),
For i = 4 To 95
If Cells(i, 1) <> Cells(i - 1, 1) Then Clean_Stock_2 (i)
用于i=4到95
如果单元格(i,1)单元格(i-1,1),则清洁库存
代码:
**子外部_循环()
对于i=4到单元格(Rows.Count,1)。结束(xlUp)。行**
如果单元格(i,1)单元格(i-1,1),则清洁库存
接下来我
端接头
次清洁库存2(ByVal r长度)
Dim库存(31,5)
昏暗的四分之一(31)
Dim Bo作为布尔值
费用=0
'框架
对于i=0到31
库存(i,0)=单元(r,1)
库存(i,1)=单元(r,2)
库存(i,2)=单元(r,3)
股票(i,5)=“Q”和格式(日期添加(“Q”,i,#1/1/2011#),Q-YYYY)
季度(i)=库存(i,5)
接下来我
"数据,
Do While单元格(r,1)=库存(0,0)
Qu=“Q”和格式(单元格(r,4),“Q-YYYY”)
rr=应用程序匹配(Qu,季度,0)
如果不是IsError(rr),则
库存(rr,3)=单元(r,4)
库存(rr,4)=单元(r,5)
如果不是Bo,则费用=库存(rr,4):Bo=真
如果结束
r=r+1
环
“填充
对于i=0到31
如果库存(i,4)=0,则
库存(i,4)=费用
其他的
费用=库存(i,4)
如果结束
接下来我
"产出",
lr=单元格(行数,“I”)。结束(xlUp)。行数+1
lr=IIf(lr<3,3,lr)
单元格(lr,“I”)。调整大小(32,6)=库存
端接头
用F8单步执行,找出Clean_Stock_2中的哪一行产生错误。用F8单步执行,找出Clean_Stock_2中的哪一行产生错误。
**Sub Outer_Loop()
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row**
If Cells(i, 1) <> Cells(i - 1, 1) Then Clean_Stock_2 (i)
Next i
End Sub
Sub Clean_Stock_2(ByVal r As Long)
Dim Stock(31, 5)
Dim Quarter(31)
Dim Bo As Boolean
Charge = 0
'Frame
For i = 0 To 31
Stock(i, 0) = Cells(r, 1)
Stock(i, 1) = Cells(r, 2)
Stock(i, 2) = Cells(r, 3)
Stock(i, 5) = "Q" & Format(DateAdd("q", i, #1/1/2011#), "q-YYYY")
Quarter(i) = Stock(i, 5)
Next i
'Data
Do While Cells(r, 1) = Stock(0, 0)
Qu = "Q" & Format(Cells(r, 4), "q-YYYY")
rr = Application.Match(Qu, Quarter, 0)
If Not IsError(rr) Then
Stock(rr, 3) = Cells(r, 4)
Stock(rr, 4) = Cells(r, 5)
If Not Bo Then Charge = Stock(rr, 4): Bo = True
End If
r = r + 1
Loop
'fill
For i = 0 To 31
If Stock(i, 4) = 0 Then
Stock(i, 4) = Charge
Else
Charge = Stock(i, 4)
End If
Next i
'Output
lr = Cells(Rows.Count, "I").End(xlUp).Row + 1
lr = IIf(lr < 3, 3, lr)
Cells(lr, "I").Resize(32, 6) = Stock
End Sub