循环代码不会填充某些工作表上的正确单元格

时间:2014-02-18 19:42:33

标签: excel vba excel-vba

以下代码在某些工作表上正常运行。该代码应该计算从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

关于可能出现什么问题的任何想法?

1 个答案:

答案 0 :(得分:0)

 While Cell_val <> ""
 iRow = iRow + 3

如果列中有连续的非空单元格,为什么不尝试使用1,而不是以3的增量跳跃行。

 iRow = iRow + 1

也许你有自己的意图,我错过了。但是使用区间跳转来选择右侧行似乎对我来说有点奇怪。