VBA为什么我的宏读取的是第5列而不是第3列
我编写了一个宏,当单元格的值不同时,在单元格之间插入一行。我的数据中有9列,数据从第2行开始。我希望我的宏检查第3列(也称为“C”列)下的所有值,并且在执行过程中,如果值发生更改(即2、2、2、3、3),它将在更改的值之间插入一行(即2、2、2、插入行、3、3)。问题是,我的宏读取的是第5(E)列,而不是第3(C)列。怎么了,我弄不明白!我知道这一点的原因也是因为我放置了一个msgbox来显示单元格的值,它匹配第5列中的所有内容,但不匹配第3列。这是我的密码:VBA为什么我的宏读取的是第5列而不是第3列,vba,excel,Vba,Excel,我编写了一个宏,当单元格的值不同时,在单元格之间插入一行。我的数据中有9列,数据从第2行开始。我希望我的宏检查第3列(也称为“C”列)下的所有值,并且在执行过程中,如果值发生更改(即2、2、2、3、3),它将在更改的值之间插入一行(即2、2、2、插入行、3、3)。问题是,我的宏读取的是第5(E)列,而不是第3(C)列。怎么了,我弄不明白!我知道这一点的原因也是因为我放置了一个msgbox来显示单元格的值,它匹配第5列中的所有内容,但不匹配第3列。这是我的密码: Sub Dividers() D
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
DividerRange(k+计数器,3)。值是相对参考DividerRange
是一个从C2
开始的范围,因此当您请求(i,j)
第个单元格,即(i,3)
时,您可以从e列中得到一些信息,其中j
第列将是:(C=1,D=2,e=3)DividerRange(k+计数器,3)。值
是一个相对参考DividerRange
是一个从C2
开始的范围,因此当您请求(i,j)
第个单元格,即(i,3)
时,您可以从e列中得到一些信息,其中j
第列将是:(C=1,D=2,e=3)DividerRange(k+计数器,3)。值
是一个相对参考DividerRange
是一个从C2
开始的范围,因此当您请求(i,j)
第个单元格,即(i,3)
时,您可以从e列中得到一些信息,其中j
第列将是:(C=1,D=2,e=3)DividerRange(k+计数器,3)。值
是一个相对参考DividerRange
是一个从C2
开始的范围,因此当您要求(i,j)
第th个单元格,即(i,3)
时,您可以从e列中得到一些信息,其中j
第th列将是:(C=1,D=2,e=3)您可以将其简化很多,不需要范围或范围计数或计数器:
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
Sub-Dividers()
Dim lastrow为长,k为整数
lastrow=范围(“C2”)。结束(xlDown)。行
对于k=2到最后一行
如果是单元格(k,3)。给单元格赋值(k-1,3)。然后给单元格赋值
单元格(k,3).EntireRow.Insert
'现在跳过一行,这样我们就不会与新的空行进行比较
k=k+1
如果结束
下一个k
端接头
您可以大大简化它,不需要范围、范围计数或计数器:
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
Sub-Dividers()
Dim lastrow为长,k为整数
lastrow=范围(“C2”)。结束(xlDown)。行
对于k=2到最后一行
如果是单元格(k,3)。给单元格赋值(k-1,3)。然后给单元格赋值
单元格(k,3).EntireRow.Insert
'现在跳过一行,这样我们就不会与新的空行进行比较
k=k+1
如果结束
下一个k
端接头
您可以大大简化它,不需要范围、范围计数或计数器:
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
Sub-Dividers()
Dim lastrow为长,k为整数
lastrow=范围(“C2”)。结束(xlDown)。行
对于k=2到最后一行
如果是单元格(k,3)。给单元格赋值(k-1,3)。然后给单元格赋值
单元格(k,3).EntireRow.Insert
'现在跳过一行,这样我们就不会与新的空行进行比较
k=k+1
如果结束
下一个k
端接头
您可以大大简化它,不需要范围、范围计数或计数器:
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
Sub-Dividers()
Dim lastrow为长,k为整数
lastrow=范围(“C2”)。结束(xlDown)。行
对于k=2到最后一行
如果是单元格(k,3)。给单元格赋值(k-1,3)。然后给单元格赋值
单元格(k,3).EntireRow.Insert
'现在跳过一行,这样我们就不会与新的空行进行比较
k=k+1
如果结束
下一个k
端接头
范围(“C1”)。单元格(1,3)为E1DividerRange
在ColumnC中已经是一个范围,因此通过将该列索引为“3”,实际上是在DividerRange
之外跨两列MsgBox DividerRange(k+计数器)。值是您想要的。我明白您的意思,谢谢!范围(“C1”)。单元格(1,3)为E1DividerRange
在ColumnC中已经是一个范围,因此通过将该列索引为“3”,实际上是在DividerRange
之外跨两列MsgBox DividerRange(k+计数器)。值是您想要的。我明白您的意思,谢谢!范围(“C1”)。单元格(1,3)为E1DividerRange
在ColumnC中已经是一个范围,因此通过将该列索引为“3”,实际上是在DividerRange
之外跨两列MsgBox DividerRange(k+计数器)。值是您想要的。我明白您的意思,谢谢!范围(“C1”)。单元格(1,3)为E1DividerRange
在ColumnC中已经是一个范围,因此通过将该列索引为“3”,实际上是在DividerRange
之外跨两列MsgBox DividerRange(k+计数器)。值是您想要的。我明白您的意思,谢谢!这对我来说没有意义。这一行的所有内容都应该改变,对吗?如果我把它从3改为1,那么它应该可以工作了?等等,不,这是不可能的,因为我在说k=2之后放置了消息框,以DividerRange.count
,它给出了第五行的值。但这意味着k+计数器不知怎么搞砸了,但我不确定当你要求DividerRange(I,j)
时,你要求的是I
th Row/j
th Column在DividerRange
中,而不是在工作表中。将DividerRange
视为工作表中单元格的子集
,您可以使用Debug.Print DividerRange(k+计数器,3)。Address
查看实际引用的地址。我明白您的意思。好的,那就把柱子拿出来,它应该可以工作了,对吗?非常感谢。我会让你知道它是否有效。这对我来说没有意义。所有这些都应该在这一行中改变,