For Each 循环每第 N 行并包括最后一行
For Each loop every Nth row and include the last row
我有一个 For Each
循环,它每 200 行跳一次并将数据从该行复制到另一个 sheet。这个循环有效,但我希望它包括最后使用的行。
例如,我有 2,132 行,所以我从第 200 行开始循环,然后是第 400 行,依此类推。循环将进行到第 2,000 行,然后结束,因为第 2,200 行不存在。但是,如果最后一行尚未包含在到 200 的最终循环中,我希望始终包含最后一行。因此在这种情况下,第 2,000 行然后是第 2,132 行。
我当前的循环:
Sub SelectEveryNthCell()
Dim rRange As Long, rEveryNth As String, lRow As Long, nRow As Long
With Sheets("Vendor Num")
rRange = .Cells(.Rows.Count, "B").End(xlUp).Row
For lRow = 200 To rRange Step 200
If lRow > rRange Then
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
End With
Exit For
End If
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
End With
Next lRow
End With
End Sub
我以为我可以用 If lRow > rRange Then
捕获它,但是循环跳过了它并在 lRow
等于 2,000 时循环结束。
我在 SO 上看到很多关于循环到第 N 行的内容,但没有提到包括最后一行。有没有办法将它包含在循环中?我想避免在循环完成后捕获最后一行,只是在最后一行是下一个第 200 行的情况下。在那种情况下,我会捕获该行两次,这是我不想要的。例如:最后一行是 2,000。循环捕获第 2,000 行,然后在循环捕获最后一行后再次捕获 2,000。
谢谢!
有多种方法可以做到这一点,但这是一种方法
Sub SelectEveryNthCell()
Dim rRange As Long, rEveryNth As String, lRow As Long, nRow As Long
With Sheets("Vendor Num")
rRange = .Cells(.Rows.Count, "B").End(xlUp).Row
For lRow = 200 To rRange Step 200
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
If lRow > rRange - 200 Then
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rRange
End If
End With
Next lRow
End With
End Sub
另一种方法是在循环之外:
Sub SelectEveryNthCell()
Dim rRange As Long, rEveryNth As String, lRow As Long, nRow As Long
Dim lRowChanged As Boolean
With Sheets("Vendor Num")
rRange = .Cells(.Rows.Count, "B").End(xlUp).Row
For lRow = 200 To rRange Step 200
If lRow = rRange Then LRowChanged = True
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
End With
Next lRow
If LRowChanged = False Then Sheets("Vendor Num Chart").Range("A" & nRow + 1).Value = .Range("B" & rRange).Value
End With
End Sub
这是您正在尝试的吗?
Option Explicit
Sub SelectEveryNthCell()
Dim rRange As Long, rEveryNth As String, lRow As Long, nRow As Long
With Sheets("Vendor Num")
rRange = .Cells(.Rows.Count, "B").End(xlUp).Row
For lRow = 200 To rRange Step 200
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
End With
Next lRow
If rRange Mod 200 <> 0 Then
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = Sheets("Vendor Num").Range("B" & rRange).Value
End With
End If
End With
End Sub
我有一个 For Each
循环,它每 200 行跳一次并将数据从该行复制到另一个 sheet。这个循环有效,但我希望它包括最后使用的行。
例如,我有 2,132 行,所以我从第 200 行开始循环,然后是第 400 行,依此类推。循环将进行到第 2,000 行,然后结束,因为第 2,200 行不存在。但是,如果最后一行尚未包含在到 200 的最终循环中,我希望始终包含最后一行。因此在这种情况下,第 2,000 行然后是第 2,132 行。
我当前的循环:
Sub SelectEveryNthCell()
Dim rRange As Long, rEveryNth As String, lRow As Long, nRow As Long
With Sheets("Vendor Num")
rRange = .Cells(.Rows.Count, "B").End(xlUp).Row
For lRow = 200 To rRange Step 200
If lRow > rRange Then
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
End With
Exit For
End If
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
End With
Next lRow
End With
End Sub
我以为我可以用 If lRow > rRange Then
捕获它,但是循环跳过了它并在 lRow
等于 2,000 时循环结束。
我在 SO 上看到很多关于循环到第 N 行的内容,但没有提到包括最后一行。有没有办法将它包含在循环中?我想避免在循环完成后捕获最后一行,只是在最后一行是下一个第 200 行的情况下。在那种情况下,我会捕获该行两次,这是我不想要的。例如:最后一行是 2,000。循环捕获第 2,000 行,然后在循环捕获最后一行后再次捕获 2,000。
谢谢!
有多种方法可以做到这一点,但这是一种方法
Sub SelectEveryNthCell()
Dim rRange As Long, rEveryNth As String, lRow As Long, nRow As Long
With Sheets("Vendor Num")
rRange = .Cells(.Rows.Count, "B").End(xlUp).Row
For lRow = 200 To rRange Step 200
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
If lRow > rRange - 200 Then
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rRange
End If
End With
Next lRow
End With
End Sub
另一种方法是在循环之外:
Sub SelectEveryNthCell()
Dim rRange As Long, rEveryNth As String, lRow As Long, nRow As Long
Dim lRowChanged As Boolean
With Sheets("Vendor Num")
rRange = .Cells(.Rows.Count, "B").End(xlUp).Row
For lRow = 200 To rRange Step 200
If lRow = rRange Then LRowChanged = True
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
End With
Next lRow
If LRowChanged = False Then Sheets("Vendor Num Chart").Range("A" & nRow + 1).Value = .Range("B" & rRange).Value
End With
End Sub
这是您正在尝试的吗?
Option Explicit
Sub SelectEveryNthCell()
Dim rRange As Long, rEveryNth As String, lRow As Long, nRow As Long
With Sheets("Vendor Num")
rRange = .Cells(.Rows.Count, "B").End(xlUp).Row
For lRow = 200 To rRange Step 200
rEveryNth = .Range("B" & lRow).Value
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = rEveryNth
End With
Next lRow
If rRange Mod 200 <> 0 Then
With Sheets("Vendor Num Chart")
nRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & nRow).Value = Sheets("Vendor Num").Range("B" & rRange).Value
End With
End If
End With
End Sub