VBA循环每两列

时间:2017-11-22 09:51:43

标签: vba excel-vba excel

我有一个相当直接的代码行,它循环遍历数据集中的行。但是我意识到我在循环中重复这个代码10次,因为我需要在每隔一列做同样的事情。

如何循环遍历列,以便此代码从Y到AA到AC列等工作,而不是为循环中的每个列手动重新计算?

For i = 1 To Count
    ActiveSheet.Range("Y" & i + 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Next i

4 个答案:

答案 0 :(得分:1)

Step 2循环中尝试For

For i = 1 To Count Step 2
    ActiveSheet.Range("Y" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
Next i

如果要遍历列,则需要类似下面的代码:

Dim Row As Long
Dim col As Long

For col = 25 To Count Step 2
     ActiveSheet.Cells(Row, col).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
Next col

答案 1 :(得分:1)

如果您需要在多个列中粘贴某些内容,请尝试嵌套循环,遍历列和行:

Public Sub TestMe()

    Dim lngRow As Long
    Dim lngCol As Long

    For lngRow = 1 To 10
        For lngCol = 25 To 29
            With ActiveSheet
                .Cells(lngRow, lngCol) = "here we paste"
            End With
        Next lngCol
    Next lngRow

End Sub

你会得到这样的东西:

enter image description here

答案 2 :(得分:0)

切换到Cells而不是Range并添加一个带有Step 2的外部循环:

For j = 25 To 31 Step 2 ' Every other col from col Y to col ACC
    For i = 1 To Count
        ActiveSheet.Cells(i + 1, j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Next i
Next j

答案 3 :(得分:0)

您可以跳过 Y AR 之间的每隔一列,如下所示:

Dim currCol As Integer, currRow As Integer
rowsToLoop = 4
For currCol = Columns("Y").Column To Columns("AR").Column Step 2
    For currRow = 1 To rowsToLoop 
        Debug.Print "Current Cell: " & ActiveSheet.Cells(currRow + 1, currCol).Address
        ActiveSheet.Cells(currRow + 1, currCol).PasteSpecial Paste:=xlPasteValues
    Next currRow
Next currCol

我会在您的代码运行之前手动或以编程方式收集复制单元格或范围...如果您是手动执行此操作,请注意有Copy范围方法。例如,要复制单元格T5,您可以使用:

Range("T5").Copy

另请注意,我将变量的名称从“Count更改为myCount”,因为Count是保留字,不应使用作为变量名。