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
在图片的帮助下,我将解释我想要达到的目标:
- 从Sheet1(“BEN”)中,列出了G和L列的列表。
- 我将从Sheet1复制单元格G5并将其粘贴到Sheet2(“JNL_BEN”)范围K4中。
- 接下来是我将从Sheet1复制单元格L5并将其粘贴到Sheet2(“JNL_BEN”)范围L4。
- 复制下一行,并执行相同的过程,就像No.2和3,但这次,它将调整下面的1行。
- 复制整个列表。 这意味着到底。 这个列表是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