以下代码在某些工作表上正常运行。该代码应该计算从1990年到2012年以及从2005年到2012年的百分比变化,并将计算分别放在最后一个非空行的第4和第5行。除了3之外,所有的纸张都是相同的。不同的纸张只有不同的年份数据。由于某种原因,这会导致VBA脚本将百分比更改计算放在正确位置下的随机行中。此外,VBA脚本无法在其中一个相同的工作表上正常工作。我不知道为什么。
Sub PercentChangeCalPIP()
Dim iRow As Long
Dim sheet_name As Range
For Each sheet_name In Sheets("WS").Range("I:I")
If sheet_name.Value = "" Then
Exit For
Else
With Sheets(sheet_name.Value)
'90-20## Percent Change
iRow = 14
Cell_val = .Cells(iRow, 1)
While Cell_val <> ""
iRow = iRow + 3
Cell_val = .Cells(iRow, 1)
Wend
.Cells(iRow + 3, 1) = "1990-2012"
'Column B,2
Cell_val = .Cells(iRow, 2)
While Cell_val <> ""
iRow = iRow + 3
Cell_val = .Cells(iRow, 2)
Wend
.Cells(iRow + 3, 2) = "=((B14/VLOOKUP(1990, A14:B46, 2,FALSE))-1)"
'Column C,3
Cell_val = .Cells(iRow, 3)
While Cell_val <> ""
iRow = iRow + 3
Cell_val = .Cells(iRow, 3)
Wend
.Cells(iRow + 3, 3) = "=((C14/VLOOKUP(1990, A14:C46, 3,FALSE))-1)"
'Column D,4
Cell_val = .Cells(iRow, 4)
While Cell_val <> ""
iRow = iRow + 3
Cell_val = .Cells(iRow, 4)
Wend
.Cells(iRow + 3, 4) = "=((D14/VLOOKUP(1990, A14:D46, 4,FALSE))-1)"
'Column E,5
Cell_val = .Cells(iRow, 5)
While Cell_val <> ""
iRow = iRow + 3
Cell_val = .Cells(iRow, 5)
Wend
.Cells(iRow + 3, 5) = "=((E14/VLOOKUP(1990, A14:E46, 5,FALSE))-1)"
'05-20## Percent Changes
Cell_val = .Cells(iRow, 1)
While Cell_val <> ""
iRow = iRow + 4
Cell_val = .Cells(iRow, 1)
Wend
.Cells(iRow + 4, 1) = "2005-2012"
'Column B,2
Cell_val = .Cells(iRow, 2)
While Cell_val <> ""
iRow = iRow + 4
Cell_val = .Cells(iRow, 2)
Wend
.Cells(iRow + 4, 2) = "=((B14/VLOOKUP(2005, A14:B46, 2,FALSE))-1)"
'Column C,3
Cell_val = .Cells(iRow, 3)
While Cell_val <> ""
iRow = iRow + 4
Cell_val = .Cells(iRow, 3)
Wend
.Cells(iRow + 4, 3) = "=((C14/VLOOKUP(2005, A14:C46, 3,FALSE))-1)"
'Column D,4
Cell_val = .Cells(iRow, 4)
While Cell_val <> ""
iRow = iRow + 4
Cell_val = .Cells(iRow, 4)
Wend
.Cells(iRow + 4, 4) = "=((D14/VLOOKUP(2005, A14:D46, 4,FALSE))-1)"
'Column E,5
Cell_val = .Cells(iRow, 5)
While Cell_val <> ""
iRow = iRow + 4
Cell_val = .Cells(iRow, 5)
Wend
.Cells(iRow + 4, 5) = "=((E14/VLOOKUP(2005, A14:E46, 5,FALSE))-1)"
End With
End If
Next sheet_name
End Sub
关于可能出现什么问题的任何想法?
答案 0 :(得分:0)
While Cell_val <> ""
iRow = iRow + 3
如果列中有连续的非空单元格,为什么不尝试使用1,而不是以3的增量跳跃行。
iRow = iRow + 1
也许你有自己的意图,我错过了。但是使用区间跳转来选择右侧行似乎对我来说有点奇怪。