在VBA中使用带有计数器的For循环

时间:2013-02-07 18:02:22

标签: excel excel-vba for-loop vba

我正在尝试构建一个循环,它将从两个单独的工作表中提取数据并将它们放入一个表中。我试图让它将数据放在行的末尾,然后向下移动一行并重复直到它到达表的末尾。 {I} Changes列我将在事后确定。我只想尝试删除WTDThis Year数据。这是我的编码。

Last Year

以下是我所拥有的表格的一个例子。

Sorry for the poor quality, but all the columns are split up like they should be

很抱歉图像质量很差。所有列都按照应有的方式分解。我尝试了几种不同的方法来实现这一目标。因为它现在将通过并将去年信息放入正确的列,但仅限于第一行。我能得到的任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:1)

使用Option Explicit ...否则,使用如此相似的变量名称可能会遇到奇怪的问题。但这不是你的问题。

您的每个方法实际上并没有根据行更改它正在写入的单元格。

例如(删除其他代码):

Function setRawData1()

Set baseFrom1Cell = Sheets("Week").Range("C2")
baseBaseCell.Offset(0, 0) = baseFrom1Cell.Value 'This Year

'Cost
baseBaseCell.Offset(0, 3) = baseFrom1Cell.Offset(0, 1) 'This Year

'Margin
baseBaseCell.Offset(0, 6) = baseFrom1Cell.Offset(0, 2) 'This Year

'Basis Points
baseBaseCell.Offset(0, 9) = baseFrom1Cell.Offset(0, 3) 'This Year

End Function

此函数总是设置完全相同的单元格(无论您的循环状态是什么),因为没有任何东西导致它们在行中偏移。

所以当你打电话

 If i = ((4 Mod 2) <> 0) Then
        setRawData1    'write to same row every time...
    Else
        setRawData2     'write to same row every time...
    End If

我建议修改你的功能:

Function setRawData1(int rowOffset)    
    baseBaseCell.Offset(rowOffset, 0) = baseFrom1Cell.Value 'This Year

    'Cost
     baseBaseCell.Offset(rowOffset, 3) = baseFrom1Cell.Offset(0, 1) 'This Year

    'Margin
    baseBaseCell.Offset(rowOffset, 6) = baseFrom1Cell.Offset(0, 2) 'This Year

    'Basis Points
     baseBaseCell.Offset(rowOffset, 9) = baseFrom1Cell.Offset(0, 3) 'This Year

然后将正确的偏移值传递给每个