循环:将单元格值(在列表中)从一个工作表复制到另一个工作表

时间:2016-05-30 07:05:26

标签: excel vba excel-vba

此宏的目的是将一个单元格值(从长列表)复制到位于不同工作表中的另一个单元格。

这是我的代码:

Sub journalben()

Set rawben = Sheets("BEN")
Set finaljnl = Sheets("JNL_BEN")

    Set Rng = Range("G2:G1048576")
    For Each cell In Rng
        'test if cell is empty
        If cell.Value <> "" Then

        finaljnl.Range("L4").Value = rawben.Range("G5").Value
        finaljnl.Range("K4").Value = rawben.Range("L5").Value
        End If
    Next
End Sub

借助图像,我将解释我想要实现的目标:

macro

  1. 从Sheet1(“BEN”)开始,列表位于G和L列。
  2. 我将从Sheet1复制单元格G5并将其粘贴到Sheet2(“JNL_BEN”)范围K4中。
  3. 接下来是我将从Sheet1复制单元格L5并将其粘贴到Sheet2(“JNL_BEN”)范围L4中。
  4. 复制下一行并执行相同的过程,就像No.2和No.3一样,但这一次,它会调整下面一行。
  5. 复制整个列表。这意味着到底。该列表动态,有时会有5,000行。
  6. 由于某些原因,复制整个列不是此宏的一个选项,因为要求来自sheet1的单元格必须从左到右(或水平)粘贴或放置在Sheet2中。

    我希望你能抽出一些时间来帮助我。我的代码不起作用,我猜FOR FOR EACH的实现是不正确的。我不确定FOR EACH是否是最好的代码。

    我感谢任何人对此的帮助。非常感谢你!愿力量与你同在。

3 个答案:

答案 0 :(得分:2)

试试这个:

Sub journalben()
    Dim i As Long, lastRow As Long

    Set rawben = Sheets("BEN")
    Set finaljnl = Sheets("JNL_BEN")

    lastRow = rawben.Cells(Rows.Count, "G").End(xlUp).Row

    For i = 5 To lastRow
        'test if cell is empty
        If rawben.Range("G" & i).Value <> "" Then
            finaljnl.Range("K" & i - 1).Value = rawben.Range("G" & i).Value
            finaljnl.Range("L" & i - 1).Value = rawben.Range("L" & i).Value
        End If
    Next i
End Sub

我从FOR开始5,因为图片中的数据从单元格G5开始(不考虑标题)。

答案 1 :(得分:1)

为此使用数字变量会更容易:

Sub journalben()

Set rawben = Sheets("BEN")
Set finaljnl = Sheets("JNL_BEN")

    Set Rng = rawben.Range("G4:G1048576")
    For i = Rng.Cells(1,1).Row to Rng.Cells(1,1).End(xlDown).Row
        'test if cell is empty
        If rawben.Range("G" & i).Value <> vbNullString Then
            finaljnl.Range("L" & i - 1).Value = rawben.Range("G" & i).Value
            finaljnl.Range("K" & i - 1).Value = rawben.Range("L" & i).Value
        End If
    Next i
End Sub

答案 2 :(得分:0)

你应该使用一个简单的for循环。它更容易使用。

此外,要使其动态化并转到范围中的最后一个单元格,请使用SpecialCells方法。

您的范围需要从第5行正确设置。

以下是代码:

Sub journalben()

Set rawben = Sheets("BEN")
Set finaljnl = Sheets("JNL_BEN")

    Set Rng = Range("G5:G1048576")
    For i = Rng.Cells(1,1).Row to Rng.SpecialCells(xlCellTypeLastCell).Row
        If rawben.Range("G" & i).Value <> vbNullString Then
            finaljnl.Range("L" & CStr(i - 1)).Value = rawben.Range("G" & CStr(i)).Value
            finaljnl.Range("K" & CStr(i - 1)).Value = rawben.Range("L" & CStr(i)).Value
        End If
    Next i
End Sub