excel - 为什么我的 For 循环在最后一行之前退出?
问题描述
我有一个相当简单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
解决方案
在 VB 中,循环的边界For
在开始时被评估一次,并且值被缓存。
如果你想要一个动态的上限,你需要使用一个Do
循环。
推荐阅读
- reactjs - 如何在不渲染另一个组件或重定向到 React 中的不同路由的情况下更改 URL?
- android - Android Studio 背景颜色不显示
- java - 如何显示和隐藏现有的 JFrame
- azure-devops - Azure Pipeline Build 中的代码覆盖率屏幕挂起
- neural-network - GloVe 嵌入 - 未知/词汇外标记
- c# - 在 Aspnet Core 中获取所有应用程序定义的配置作为键/值
- ios - 在 Appstore 之外向公共用户分发 iOS 应用程序
- google-cloud-platform - 无法使用 Java SocketFactory 库连接到 Cloud SQL
- javascript - Vuetify.js 网格系统未按预期对齐
- java - SpringBoot 2.1.0 尝试集成数据库访问时抛出 ClassNotFoundException