如何遍历列并将其值复制到另外两列?

时间:2014-08-08 11:34:27

标签: excel vba excel-vba

我一直在尝试创建一个宏,它将通过电子表格并复制单元格E中的数字,然后将它们粘贴到单元格K和L中,然后重复为宏横向列E.即E1将被复制到K1和L1,E2将被复制到K2,L2等......

这是我到目前为止所做的:

Sub uy()
'
' Macro1 Macro
' lo
'
   Range("E299").Select
      Do Until IsEmpty(ActiveCell)
         If ActiveCell.Value < 0 Then
            Selection.Copy
            Range("K299").Select
                Do Until IsEmpty(ActiveCell)
                    ActiveSheet.Paste
            Loop
            Range("L299").Select
                Do Until IsEmpty(ActiveCell)
                    ActiveSheet.Paste
            Loop
         Else
            Range("L299").Select
                Do Until IsEmpty(ActiveCell)
                    ActiveSheet.Paste
            Loop
        End If
        ActiveCell.Offset(1, 0).Select
      Loop
End Sub

当我运行宏时,它只是用虚线框突出显示单元格E229,单元格K299,L299保留为空白。我觉得Range("K299").Select, Do Until IsEmpty(ActiveCell), ActiveSheet.Paste部分正在选择并复制一个空白单元格,因此它会在满足“Do Until IsEmpty(ActiveCell)”标准时自行终止。

我有办法解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

我觉得这样的事情会起作用。

Sub Copy()

    Dim intRowCount as Long
    Dim intLastRow as Long

    intRowCount = 2
    intLastRow = Application.CountA(Sheets(1).Range("e:e"))

    For intRowCount = 2 To intLastRow
        Sheets(1).Range("K" & intRowCount ).Value = Sheets(1).Range("E" & intRowCount ).Value
        Sheets(1).Range("L" & intRowCount ).Value = Sheets(1).Range("E" & intRowCount ).Value
    Next

End Sub

答案 1 :(得分:0)

我不太确定我是否帮助你。 但是如果你想将一个范围复制到另一个范围那么 这样做会。

Private Sub CommandButton1_Click()
      For i = 1 To Cells(Rows.Count, 5).End(xlUp).Row
            If Cells(i, 5) <> "" Then
                  Cells(i, 11).Value = Cells(i, 5).Value
                  Cells(i, 12).Value = Cells(i, 5).Value
            End If
      Next i
End Sub

这个marco的工作时间与电池一样长[&#39; i&#39;在E列中不是空的 并取得了细胞的价值&#39; i&#39;在E栏中,将其放入K和L列中

亲切的问候

答案 2 :(得分:0)

首先,请勿使用ActivateSelect。他们在大多数代码中都没用99%。接下来,不要使用复制和粘贴。这种方法很慢。

以下代码更简洁,更快捷。

Sub EtoKL()

    Dim WS As Worksheet
    Dim LRow As Long, Iter As Long

    Set WS = ThisWorkbook.Sheets("Sheet1") 'Change as necessary.
    With WS
        LRow = .Range("E" & .Rows.Count).End(xlUp).Row 'Get last used row in Column E.
        For Iter = 1 To LRow 'Iterate from 1 to last used row.
            Union(.Range("K" & Iter), .Range("L" & Iter)).Value = .Range("E" & Iter).Value
        Next
    End With

End Sub

如果有帮助,请告诉我们。