Excel 如何使循环引用下一个单元格?
下面的代码将以我想要的方式从一张纸复制和插入文本到另一张纸。但是,我不知道如何编写一个循环,使其对其余数据起作用。这里是新手,所以可能很简单。如果代码适用,它只需要检查WS1工作表上的下一行,并在WS2工作表上输入 我已经注释掉了我写的不起作用的循环。我尝试了startitem=startitem+1和startitem=startitem.offset(1),但两者都无法工作Excel 如何使循环引用下一个单元格?,excel,vba,Excel,Vba,下面的代码将以我想要的方式从一张纸复制和插入文本到另一张纸。但是,我不知道如何编写一个循环,使其对其余数据起作用。这里是新手,所以可能很简单。如果代码适用,它只需要检查WS1工作表上的下一行,并在WS2工作表上输入 我已经注释掉了我写的不起作用的循环。我尝试了startitem=startitem+1和startitem=startitem.offset(1),但两者都无法工作 Sub transferdata() Application.ScreenUpdating = False Dim
Sub transferdata()
Application.ScreenUpdating = False
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim startrow As Range
Dim startpremium As Range
Dim startitem As Range
Dim itemcount As Range
Set ws1 = Sheets("Input")
Set ws2 = Sheets("PakEmail")
Set startrow = ws2.Range("B18")
Set startpremium = ws2.Range("E18")
Set startitem = ws1.Range("D11")
Set itemcount = ws1.Range("D44")
Set copyname = ws1.Range("B11")
Set copypremium = ws1.Range("D11")
'Let X = 0
'Do While X <= itemcount
If startitem <> 0 Then
copyname.SpecialCells(xlCellTypeVisible).Copy
startrow.PasteSpecial xlPasteValues
copypremium.SpecialCells(xlCellTypeVisible).Copy
startpremium.PasteSpecial xlPasteValuesAndNumberFormats
End If
'X = X + 1
'Loop
Application.ScreenUpdating = True
End Sub
子传输数据()
Application.ScreenUpdating=False
将ws1设置为工作表
将ws2设置为工作表
暗淡的星光范围
暗淡的起始频率范围
暗星光范围
Dim itemcount作为范围
设置ws1=工作表(“输入”)
设置ws2=工作表(“PakEmail”)
设置startrow=ws2.范围(“B18”)
设置startpremium=ws2.范围(“E18”)
设置startitem=ws1.范围(“D11”)
Set itemcount=ws1.Range(“D44”)
设置copyname=ws1.Range(“B11”)
设置copypremium=ws1.范围(“D11”)
'设X=0
“在X的同时做一些需要记住的事情。。。执行此操作时,您需要记住三件事:
- 1) 您可以在源数据上使用for或for-each循环从一行移动到另一行(在我的示例代码中,迭代的变量是i)
- 2) 您想知道目标工作表上的最后一行(lrs=最后一行源,lrd=最后一行目标)
- 3) 在源/目标工作表之间移动时,跟踪所有资格(注意使用src和dst的位置)
一个通用代码,用于牢记上述内容:
dim src as worksheet, dst as worksheet, i as long, lrs as long, lrd as long
set src = Sheets("SourcE")
set dst = sheets("Destination")
with src
lrs = .cells(.rows.count,1).end(xlup).row
for i = 1 to lrs
if .cells(i,1).value = "what i want it to be" then
lrd = dst.cells(dst.rows.count,1).end(xlup).row
dst.rows(lrd+1).value = .rows(i).value
end if
next i
end with
要记住的几件事。。。执行此操作时,您需要记住三件事:
- 1) 您可以在源数据上使用for或for-each循环从一行移动到另一行(在我的示例代码中,迭代的变量是i)
- 2) 您想知道目标工作表上的最后一行(lrs=最后一行源,lrd=最后一行目标)
- 3) 在源/目标工作表之间移动时,跟踪所有资格(注意使用src和dst的位置)
一个通用代码,用于牢记上述内容:
dim src as worksheet, dst as worksheet, i as long, lrs as long, lrd as long
set src = Sheets("SourcE")
set dst = sheets("Destination")
with src
lrs = .cells(.rows.count,1).end(xlup).row
for i = 1 to lrs
if .cells(i,1).value = "what i want it to be" then
lrd = dst.cells(dst.rows.count,1).end(xlup).row
dst.rows(lrd+1).value = .rows(i).value
end if
next i
end with
问:是itemcount
保存计数的范围,还是离开循环前D列的最后一项?是保存计数的范围问:是itemcount
保存计数的范围,还是离开循环前D列的最后一项?是保存计数的范围感谢回复,我无法让它与我所拥有的一起工作。@M.Isaacs我不确定我是否理解你的评论。您试图实现我的代码,但没有成功地使其正常工作,或者您指的是您的总体努力?抱歉,本打算增加这一点,但在尝试修复它时分心了。我试图实施,但不知道如何改变它,以适应我想要的。如果“最后一行源”是固定行(31),是否可以更改?此外,我的源目的地与我要添加的空白单元格在同一列中有文本,它会正确找到“最后一行”吗?根据我之前发布的代码,我希望“copyname”、“startrow”、“copypremium”和“startpremium”从其原始范围更改为下一行。i、 e.“copyname”应该从ws1.range(“B11”)更改为ws1.range(“B12”)并运行宏。我尝试了copyname=copyname.offset(1,0)但是循环仍然不起作用。如果“startitem”为空会导致问题吗?我假设如果为空,它不会复制并移动到下一行,但可能我错了。@m.Isaacslrs
将查找最后一行(基于我代码中的第1(a)列)每次运行代码时,都会保持源行数的动态性,因此如果以后添加更多数据,则无需手动更改值。这与lrd
类似,其中最后一行在循环内部动态确定,目标值将是动态确定的目标最后一行的+1行。循环中使用单元格(i,列)
允许每个单元格引用进行迭代(i表示迭代),因此,对于每个应该迭代的变量,都可以进行迭代。感谢您的回复,我无法让它与我所拥有的一起工作。@M.Isaacs我不确定我是否理解您的评论。您已经尝试实现了我的代码,但没有成功地使其工作,或者您是指您的总体努力吗?抱歉,我将添加到在,但在尝试修复时分心。我尝试实现,但不确定如何更改它以满足我的需要。如果“最后一行源”是固定行(31)同样,我的源目的地在同一列中的文本与我要添加的空白单元格相同,它会正确地找到“最后一行”吗?从我以前发布的代码中,我希望“CONYNAMEY”、“STARTROW”、“CopyPrime”和“StimePosipe”从它们的原始范围变为下一行。我尝试了copyname=copyname.offset(1,0),但循环仍然不起作用。如果“startitem”为空,是否会导致问题?我假设如果它是空的,它不会复制并移动到下一行,但可能我错了。@m.Isaacslrs
每次运行代码时都会找到最后一行(基于代码中的第1(A)列);这将使源行数保持动态,因此,如果以后添加更多数据,则不必手动更改值。这与lrd
类似,其中最后一行是在循环内部动态确定的,目标值将是动态确定的目标最后一行的+1行。循环中使用单元格(i,column)
允许每个单元格引用进行迭代(i表示迭代),因此对于每个应该迭代的变量,都可以进行迭代。