VBA为什么我的宏读取列5而不是3

时间:2014-07-15 20:02:22

标签: vba excel-vba excel

我写了一个宏,当它们的值不同时在单元格之间插入一行。我的数据中有9列,数据从第2行开始。我希望我的宏检查第3列中的所有值(也称为列“C”),如果值发生变化(即2, 2,2,3,3)它将在改变的值之间插入一行(即2,2,2,INSERT ROW,3,3)。问题是,我的宏读的是第5列(E)而不是3(C)。有什么问题,我无法弄清楚!我之所以知道这个的原因是因为我放了一个msgbox来吐出单元格的值,它匹配第5列中的所有内容但不匹配3.这是我的代码:

Sub Dividers()

Dim DividerRange As Range, lastrow As Long, k As Integer, counter As Integer

lastrow = Range("C2").End(xlDown).Row

Set DividerRange = Range(Cells(2, 3), Cells(lastrow, 3))
counter = 0

For k = 2 To DividerRange.Count
MsgBox DividerRange(k + counter, 3).Value
    If DividerRange(k + counter, 3).Value = DividerRange(k + counter - 1, 3).Value Then
    DividerRange(k + counter, 3).EntireRow.Insert
    counter = counter + 1
    Else
End If
Next k

End Sub

2 个答案:

答案 0 :(得分:2)

DividerRange(k + counter, 3).Value是相对参考。 DividerRange是一个从C2开始的范围,因此当您要求(i,j)个单元格,即(i,3)时,您会从E列获得j列的内容将是:(C = 1,D = 2,E = 3)

答案 1 :(得分:1)

你可以简化它,不需要范围或范围计数,或者计数器:

Sub Dividers()

    Dim lastrow As Long, k As Integer

    lastrow = Range("C2").End(xlDown).Row

    For k = 2 To lastrow
        If Cells(k, 3).Value <> Cells(k - 1, 3).Value Then
            Cells(k, 3).EntireRow.Insert

            'Now skip a row so we don't compare against the new empty row
            k = k + 1
        End If
    Next k

End Sub