Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使循环引用下一个单元格?_Excel_Vba - Fatal编程技术网

Excel 如何使循环引用下一个单元格?

Excel 如何使循环引用下一个单元格?,excel,vba,Excel,Vba,下面的代码将以我想要的方式从一张纸复制和插入文本到另一张纸。但是,我不知道如何编写一个循环,使其对其余数据起作用。这里是新手,所以可能很简单。如果代码适用,它只需要检查WS1工作表上的下一行,并在WS2工作表上输入 我已经注释掉了我写的不起作用的循环。我尝试了startitem=startitem+1和startitem=startitem.offset(1),但两者都无法工作 Sub transferdata() Application.ScreenUpdating = False Dim

下面的代码将以我想要的方式从一张纸复制和插入文本到另一张纸。但是,我不知道如何编写一个循环,使其对其余数据起作用。这里是新手,所以可能很简单。如果代码适用,它只需要检查WS1工作表上的下一行,并在WS2工作表上输入

我已经注释掉了我写的不起作用的循环。我尝试了startitem=startitem+1和startitem=startitem.offset(1),但两者都无法工作

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.Isaacs
lrs
将查找最后一行(基于我代码中的第1(a)列)每次运行代码时,都会保持源行数的动态性,因此如果以后添加更多数据,则无需手动更改值。这与
lrd
类似,其中最后一行在循环内部动态确定,目标值将是动态确定的目标最后一行的+1行。循环中使用
单元格(i,列)
允许每个单元格引用进行迭代(i表示迭代),因此,对于每个应该迭代的变量,都可以进行迭代。感谢您的回复,我无法让它与我所拥有的一起工作。@M.Isaacs我不确定我是否理解您的评论。您已经尝试实现了我的代码,但没有成功地使其工作,或者您是指您的总体努力吗?抱歉,我将添加到在,但在尝试修复时分心。我尝试实现,但不确定如何更改它以满足我的需要。如果“最后一行源”是固定行(31)同样,我的源目的地在同一列中的文本与我要添加的空白单元格相同,它会正确地找到“最后一行”吗?从我以前发布的代码中,我希望“CONYNAMEY”、“STARTROW”、“CopyPrime”和“StimePosipe”从它们的原始范围变为下一行。我尝试了copyname=copyname.offset(1,0),但循环仍然不起作用。如果“startitem”为空,是否会导致问题?我假设如果它是空的,它不会复制并移动到下一行,但可能我错了。@m.Isaacs
lrs
每次运行代码时都会找到最后一行(基于代码中的第1(A)列);这将使源行数保持动态,因此,如果以后添加更多数据,则不必手动更改值。这与
lrd
类似,其中最后一行是在循环内部动态确定的,目标值将是动态确定的目标最后一行的+1行。循环中使用
单元格(i,column)
允许每个单元格引用进行迭代(i表示迭代),因此对于每个应该迭代的变量,都可以进行迭代。