【问题标题】:Why is my For Loop exiting before last row?为什么我的 For 循环在最后一行之前退出?
【发布时间】:2019-03-29 15:14:38
【问题描述】:

我有一个相当简单的For loop 正在查看 2 列 - NAME 和 JOB。如果单元格中有逗号分隔的名称,它会触发一个函数,将每个名称插入下面一行,然后获取新行数并将其添加到最后一行值(减 1)。然后,如果该名称旁边没有 JOB,则使用上面的 JOB 值 +1。

我遇到的问题是,即使我可以看到LastRow 值在我逐步执行时被添加,但在循环开始时达到原始LastRow 值后,循环仍然退出。

即如果循环开始时LR = 100,但是因为CountUnique,LR now = 115,100之后循环仍然退出。

我不知道为什么。

 LR = Range("B" & Rows.Count).End(xlUp).Row

' Mirror missing attributes
    For i = 2 To LR
        If InStr(Cells(i, 2).Value, ",") Then
            LR = LR + CountUnique(Cells(i, 2)) - 1
        End If
        If Cells(i, 1).Value = "" Then
            Cells(i, 1).Value = Cells(i - 1, 1).Value
        End If

    Next i

Public Function CountUnique(r As Range) As Integer

  Dim c As Collection
    Set c = New Collection
    ary = Split(r.Text, ",")
    On Error Resume Next
    For Each a In ary
        c.Add a, CStr(a)
        If Err.Number = 0 Then

            If CountUnique >= 1 Then
                r.Offset(CountUnique, 0).EntireRow.Insert
                r.Offset(CountUnique, 0).Value = Trim(a)
            End If

            CountUnique = CountUnique + 1
        Else
            Err.Number = 0
        End If
    Next a

 r.Value = c.Item(1)

End Function

【问题讨论】:

    标签: excel vba for-loop


    【解决方案1】:

    在 VB 中,For 循环的边界在开始时计算一次并缓存值。

    如果你想要一个动态的上限,你需要使用Do 循环。

    【讨论】:

    • 谢谢!出于某种原因,我一直避免使用Do 循环。缓存中非常有价值的 RE 信息。
    猜你喜欢
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    相关资源
    最近更新 更多