VBA为什么我的宏读取的是第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

我编写了一个宏,当单元格的值不同时,在单元格之间插入一行。我的数据中有9列,数据从第2行开始。我希望我的宏检查第3列(也称为“C”列)下的所有值,并且在执行过程中,如果值发生更改(即2、2、2、3、3),它将在更改的值之间插入一行(即2、2、2、插入行、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

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)为E1
DividerRange
在ColumnC中已经是一个范围,因此通过将该列索引为“3”,实际上是在
DividerRange
之外跨两列
MsgBox DividerRange(k+计数器)。值是您想要的。我明白您的意思,谢谢!范围(“C1”)。单元格(1,3)为E1
DividerRange
在ColumnC中已经是一个范围,因此通过将该列索引为“3”,实际上是在
DividerRange
之外跨两列
MsgBox DividerRange(k+计数器)。值是您想要的。我明白您的意思,谢谢!范围(“C1”)。单元格(1,3)为E1
DividerRange
在ColumnC中已经是一个范围,因此通过将该列索引为“3”,实际上是在
DividerRange
之外跨两列
MsgBox DividerRange(k+计数器)。值是您想要的。我明白您的意思,谢谢!范围(“C1”)。单元格(1,3)为E1
DividerRange
在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
查看实际引用的地址。我明白您的意思。好的,那就把柱子拿出来,它应该可以工作了,对吗?非常感谢。我会让你知道它是否有效。这对我来说没有意义。所有这些都应该在这一行中改变,