1

嵌套循环的作品。问题 - 我不知道如何使循环移动到下一个单元格(B11:B20);它只是将值重写到范围(B1:B10)。我的想法是我可能不需要嵌套循环,但我无法解决解决方案。

Sub insertNum()

Dim sheetOne As Worksheet
Set sheetOne = Worksheets("Sheet1")

Dim i, j As Long
For i = 1 To sheetOne.UsedRange.Rows.Count
    For j = 1 To 10
        Select Case j
            Case 1 To 5
            sheetOne.Cells(j, 2).Value = "2"
            Case 6 To 10
            sheetOne.Cells(j, 2).Value = "3"
         End Select
    Next j
Next i
End Sub
4

3 回答 3

1

我认为这可以满足您的要求。我对其进行了测试,它只是每 5 行在 2 和 3 之间切换。

Sub insertNum()

Dim sheetOne As Worksheet
Set sheetOne = Worksheets("Sheet1")

Dim i As Long, j As Long
For i = 1 To sheetOne.UsedRange.Rows.Count Step 10
For j = 1 To 10
    Select Case j
        Case 1 To 5
        sheetOne.Cells(i + j - 1, 2).Value = "2"
        Case 6 To 10
        sheetOne.Cells(i + j - 1, 2).Value = "3"
     End Select
Next j
Next i
End Sub
于 2013-10-25T15:11:07.147 回答
1

您可以在代码中不使用任何循环来完成此操作,在这种情况下,使用以下代码将执行时间增加约 400%:

Sub insertNumNoLoopSample()
With [B1:B50000]
    .FormulaR1C1 = _
        "=IF(ISNA(MATCH(RIGHT(ROW(),1), {""1"",""2"",""3"",""4"",""5""},0)),3,2)"
    .Value = .Value
End With
End Sub

在运行每个代码(其他答案和这个)的 B1:B50000 范围内进行测试,我的代码平均需要 0.41 秒才能执行,而其他答案平均需要 2.1 秒才能执行。

您可以按原样使用代码,或者修改 With 行并添加您希望在其上运行代码的范围,如果您想改用使用的范围(不推荐),那么您可以替换

With [B1:B50000]

并改用以下内容。

With ActiveSheet.UsedRange.Columns("B")

如果您不知道最后一行将是什么,或者如果它会改变,那么获取最后使用的行而不是使用使用的范围的最佳方法是使用以下内容:

Sub NoLoopSample()
Dim lastRow As Long
'Replace The A with the Column of your data that 
'will the longest amount of data.
lastRow = Range("A" & Rows.Count).End(xlUp).Row 

With Range("B1:B" & lastRow)
    .FormulaR1C1 = _
        "=IF(ISNA(MATCH(RIGHT(ROW(),1), {""1"",""2"",""3"",""4"",""5""},0)),3,2)"
    .Value = .Value
End With
End Sub
于 2013-10-25T16:05:52.637 回答
0

这不应该是:

Sub insertNum()

Dim sheetOne As Worksheet
Set sheetOne = Worksheets("Sheet1")

Dim i, j As Long
For i = 1 To sheetOne.UsedRange.Rows.Count
    For j = 1 To 10
        Select Case j
            Case 1 To 5
            sheetOne.Cells(j, i).Value = "2"
            Case 6 To 10
            sheetOne.Cells(j, i).Value = "3"
        End Select
    Next j
Next i
End Sub

在我看来,您将行 (2) 分配到循环中是硬编码的。我认为 i 是行循环器,但您从不使用该值来分配您的单元格。

于 2013-10-25T15:06:04.937 回答