Vba 当满足条件时,从一行复制某些单元格,并粘贴到新的工作表中
当列E=“Accepted”时,我试图从一行复制单元格A:D,并将数据作为值粘贴到另一张表中Vba 当满足条件时,从一行复制某些单元格,并粘贴到新的工作表中,vba,excel,Vba,Excel,当列E=“Accepted”时,我试图从一行复制单元格A:D,并将数据作为值粘贴到另一张表中 For i = 2 To LastRowSourceSheet If SourceSheet.Range("E" & i).Value = "Accepted" Then _ DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
但每次我尝试,它只复制最后一行,我不明白为什么。我真的很感激你的帮助
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
我的代码如下所示:
Public Sub AcceptLastChangeRequest()
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
On Error GoTo errorHandler:
Dim varAnswer As String
varAnswer = MsgBox("Are you sure you wish to accept the most recent Change Request?", vbYesNo, "Accept Change Request")
If varAnswer = vbNo Then
MsgBox ("No changes saved")
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
Exit Sub
End If
Dim SourceRange As Range, DestRange As Range
Dim DestSheet As Worksheet, SourceSheet As Worksheet
Dim LastRowDestSheet As Long, i As Long, LastRowSourceSheet As Long
Set DestSheet = ThisWorkbook.Worksheets("Accepted Change Requests")
Set SourceSheet = ThisWorkbook.Worksheets("All Change Requests")
LastRowDestSheet = DestSheet.Cells(DestSheet.Rows.Count, "A").End(xlUp).Row
LastRowSourceSheet = SourceSheet.Cells(SourceSheet.Rows.Count, "E").End(xlUp).Row
For i = 2 To LastRowSourceSheet
If Sheets("All Change Requests").Range("E" & i).Value = "Accepted" Then
Set SourceRange = SourceSheet.Range("A" & i, "D" & i)
Set DestRange = DestSheet.Range("A" & LastRowDestSheet + 1)
SourceRange.Copy
DestRange.PasteSpecial _
Paste:=xlPasteValues, _
operation:=xlPasteSpecialOperationNone, _
skipblanks:=False, _
Transpose:=False
Application.CutCopyMode = False
End If
Next i
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
Exit Sub
errorHandler:
MsgBox ("There was an error adding this Change Request")
Resume Next
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
您没有更新目标工作表的最后一行
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
放
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
在if子句的末尾(在“Set DestRange=DestSheet.Range…”之后)您没有更新目标工作表的最后一行
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
放
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
在if子句的末尾(在“Set DestRange=DestSheet.Range…”之后)尝试用以下内容替换循环:
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
编辑(进一步操作请求)
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
尝试用以下内容替换您的循环:
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
编辑(进一步操作请求)
For i = 2 To LastRowSourceSheet
If SourceSheet.Range("E" & i).Value = "Accepted" Then _
DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _
SourceSheet.Range("A" & i & ":D" & i).Value
LastRowDestSheet = LastRowDestSheet + 1
Next i
另一种可能更快的方法是使用.AutoFilter为列E选择“accepted”。然后在单个组中复制/粘贴可见单元格(列A:D)。另一种可能更快的方法是为列E使用.AutoFilter选择“accepted”。然后复制/粘贴可见单元格(列A:D)在一个集团里。这太棒了,完全符合我的要求。但是,如果复制数据的A列中的数据在目标工作表的A列中不存在(即,还没有具有该唯一ID的技术请求),是否有任何方法仅将数据粘贴到“已接受的更改请求”中。恐怕您需要进一步澄清,
DestSheet
是“已接受的变更请求”表,因此仅将值复制到该表中?基本上,任何新的变更请求都将添加到“所有变更请求”表中,并在a列中分配一个唯一ID。我只想通过将E列的值设置为“已接受”将已接受的变更请求复制到“已接受的变更请求”表中“床单。但是,我不希望任何已经出现在“已接受的更改请求”上的更改请求被复制。我希望这有意义?你必须为此添加一个唯一的ID。同时,将该唯一ID复制到dest工作表中,并迭代现有条目/自动筛选它们,以检查您在Momentgjohn复制的唯一ID-我该怎么做?这太棒了,完全符合我的要求。但是,如果复制数据的A列中的数据在目标工作表的A列中不存在(即,还没有具有该唯一ID的技术请求),是否有任何方法仅将数据粘贴到“已接受的更改请求”中。恐怕您需要进一步澄清,DestSheet
是“已接受的变更请求”表,因此仅将值复制到该表中?基本上,任何新的变更请求都将添加到“所有变更请求”表中,并在a列中分配一个唯一ID。我只想通过将E列的值设置为“已接受”将已接受的变更请求复制到“已接受的变更请求”表中“床单。但是,我不希望任何已经出现在“已接受的更改请求”上的更改请求被复制。我希望这有意义?你必须为此添加一个唯一的ID。还要将该唯一ID复制到dest工作表中,并迭代现有条目/自动筛选它们,以检查您在Momentgjohn复制的唯一ID-我将如何做?