我有一个相当简单的For loop
,它查看2列-NAME和JOB。如果单元格中有逗号分隔的名称,它将触发一个函数,该函数将每个名称插入下面的一行,然后获取新行数并将其添加到最后一行值(负1)。然后,如果该名称旁边没有JOB,它将使用上面的JOB值+1。
我遇到的问题是,即使我在逐步浏览时看到LastRow
值已添加到该值,当循环达到原始LastRow
值时,该循环仍会退出开始。
即如果在循环开始时LR = 100,但是由于CountUnique,现在LR = 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
答案 0 :(得分:1)
在VB中,For
循环的边界在开始时被评估一次,并且值被缓存。
如果需要动态上限,则需要使用Do
循环。