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

此macros的目的是复制一个单元格值(从一个长列表)到位于另一个表单中的另一个单元格。

这是我的代码:

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 

在图片的帮助下,我将解释我想要达到的目标:

宏

  1. 从Sheet1(“BEN”)中,列出了G和L列的列表。
  2. 我将从Sheet1复制单元格G5并将其粘贴到Sheet2(“JNL_BEN”)范围K4中。
  3. 接下来是我将从Sheet1复制单元格L5并将其粘贴到Sheet2(“JNL_BEN”)范围L4。
  4. 复制下一行,并执行相同的过程,就像No.2和3,但这次,它将调整下面的1行。
  5. 复制整个列表。 这意味着到底。 这个列表是dynamic的 ,有时候会是5000行。

由于某些原因,复制整个列不是这个macros的选项,因为要求sheet1中的单元格必须从左到右(或水平)粘贴或放置在Sheet2中。

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

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

尝试这个:

 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 

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

你应该使用一个简单的for循环。 与其合作更容易。

此外,为了使其具有dynamic性并转到范围中的最后一个单元格,请使用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 

使用这个数字variables会更容易:

 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