我写了一个宏,当它们的值不同时在单元格之间插入一行。我的数据中有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
答案 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