Excel 将一张图纸中的数据范围作为值复制到另一张图纸,直到出现特定值

Excel 将一张图纸中的数据范围作为值复制到另一张图纸,直到出现特定值,excel,vba,Excel,Vba,在下面的代码中,我需要从“Output for qualification”复制一个范围,并在“Output”中插入值 它可以工作,但是当列A开始包含值0(0)时,我需要代码停止复制范围 有没有聪明的方法?希望你们能帮助我 Sub Copy_to_output() Worksheets("Output for qualifying").Range("A2:A400").Copy Worksheets("Output").Range(

在下面的代码中,我需要从“Output for qualification”复制一个范围,并在“Output”中插入值

它可以工作,但是当列A开始包含值0(0)时,我需要代码停止复制范围

有没有聪明的方法?希望你们能帮助我

Sub Copy_to_output()

Worksheets("Output for qualifying").Range("A2:A400").Copy

Worksheets("Output").Range("A9").PasteSpecial Paste:=xlPasteValues


Worksheets("Output for qualifying").Range("B2:H400").Copy

Worksheets("Output").Range("E9").PasteSpecial Paste:=xlPasteValues


Worksheets("Output for qualifying").Range("J2:K400").Copy

Worksheets("Output").Range("L9").PasteSpecial Paste:=xlPasteValues


Worksheets("Output for qualifying").Range("Q2:Y400").Copy

Worksheets("Output").Range("N9").PasteSpecial Paste:=xlPasteValues


Application.CutCopyMode = False


End Sub

在你的情况下,我唯一能想到的就是使用这种方法

因此,在代码中,找到第一个
0
值,然后将其用作副本的行引用。这绝不是一个干净的操作方式,但可以完成任务

将_子复制到_输出()
一行的长度一样长
lZeroRow=工作表(“合格输出”)。范围(“A:A”)。查找(What:=“0”,LookIn:=xlValues,LookAt:=xlWhole)。行
工作表(“合格输出”)。范围(“A2:A”和LZEROW)。复制
工作表(“输出”)。范围(“A9”)。粘贴特殊粘贴:=xlPasteValues
工作表(“合格输出”)。范围(“B2:H”和LZEROW)。复制
工作表(“输出”).Range(“E9”).Paste特殊粘贴:=XLPaste值
工作表(“合格输出”)。范围(“J2:K”和LZEROW)。复制
工作表(“输出”).Range(“L9”).Paste特殊粘贴:=XLPaste值
工作表(“合格输出”)。范围(“Q2:Y”和LZEROW)。复制
工作表(“输出”)。范围(“N9”)。粘贴特殊粘贴:=XLPasteValue
Application.CutCopyMode=False
端接头

请尝试下一个代码:

Sub Copy_to_output()
 Dim shOFQ As Worksheet, shO As Worksheet, lastRow As Long
 Set shOFQ =  Worksheets("Output for qualifying")
 Set shO = Worksheets("Output")
 lastRow = shOFQ.Range("A:A").Find(What:="0", LookIn:=xlValues, LookAt:=xlWhole).row
  
  shO.Range("A9").Resize(lastRow, 1).Value = shOFQ.Range("A2:A" & lastRow).Value
  shO.Range("E9").Resize(lastRow, shOFQ.Range("B2:H" & lastRow).Columns.Count).Value = shOFQ.Range("B2:H" & lastRow).Value
  shO.Range("L9").Resize(lastRow, shOFQ.Range("J2:K" & lastRow).Columns.Count).Value = shOFQ.Range("J2:K" & lastRow).Value
  shO.Range("N9").Resize(lastRow, shOFQ.Range("Q2:Y" & lastRow).Columns.Count).Value = shOFQ.Range("Q2:Y" & lastRow).Value
End Sub

不需要使用复制粘贴…

你的意思是你想要吗?@JBL:很高兴我能帮上忙!但是有人,无法理解,投了反对票。。。它速度快,消耗资源少,时间短。无论如何,当有人提供解决方案时,我们在这里选中code left side复选框以使其成为可接受的答案。这样,其他搜索类似问题的人就会知道代码是有效的。我可以使用列编号而不是
shOFQ.Range(“B2:H”&lastRow).columns.Count
,但我采用这种方式允许您更改范围维度,而无需调整范围地址以外的任何内容。。。