首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的宏读取列5而不是3

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

Stack Overflow用户
提问于 2014-07-15 20:02:21
回答 2查看 97关注 0票数 0

当单元格的值不同时,我编写了一个宏以在单元格之间插入一行。我的数据中有9列,数据从第2行开始。我希望宏检查第3列(也称为“C”列)下的所有值,当它通过时,如果值发生变化(即,2、2、2、3、3),它将在更改的值之间插入一行(即2、2、2、插入行、3、3)。问题是,我的宏读的是第5(E)栏,而不是3(C)。怎么了,我搞不懂!我之所以知道这一点,是因为我放置了一个msgbox来吐出单元格的值,它匹配第5列中的所有内容,而不是第3列。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-15 20:07:31

DividerRange(k + counter, 3).Value是一个相对的引用。DividerRange是从C2开始的范围,所以当您请求(i,j)第th单元格时,即从E列中得到一些信息,其中jth列为:(C = 1,D= 2,E= 3)

票数 2
EN

Stack Overflow用户

发布于 2014-07-15 20:18:24

您可以简化它很多,没有必要的范围,范围计数,或计数器:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24767139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档