Excel 如何更快地复制和粘贴?

Excel 如何更快地复制和粘贴?,excel,vba,Excel,Vba,我从“数据库”复制数据并将其粘贴到另一张图纸上。 宏从Sheet1中的列表中获取名称,并在Sheet2中查找匹配项。 当找到匹配项时,它正在复制特定的单元格 我为列表中的每个人都有一个宏,所以我有五个宏做同样的事情,所以可能这就是为什么它需要这么多时间(大约三分钟) 有没有办法让它更快 Sub-CopySalesMan1() 调暗最后一行的长度,调暗最后一行的长度 lastrow=工作表(“Sheet2”)。单元格(Rows.Count,2)。结束(xlUp)。行 对于i=2到最后一行 如果工作

我从“数据库”复制数据并将其粘贴到另一张图纸上。
宏从Sheet1中的列表中获取名称,并在Sheet2中查找匹配项。
当找到匹配项时,它正在复制特定的单元格

我为列表中的每个人都有一个宏,所以我有五个宏做同样的事情,所以可能这就是为什么它需要这么多时间(大约三分钟)

有没有办法让它更快

Sub-CopySalesMan1()
调暗最后一行的长度,调暗最后一行的长度
lastrow=工作表(“Sheet2”)。单元格(Rows.Count,2)。结束(xlUp)。行
对于i=2到最后一行
如果工作表(“Sheet2”).单元格(i,25).Value=工作表(“Sheet1”).单元格(6,12).Value,则
工作表(“表2”)。单元格(i,2)。副本
erow=工作表(“Sheet1”)。单元格(Rows.Count,4)。结束(xlUp)。行
工作表(“Sheet1”).单元格(erow+1,3).粘贴特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
工作表(“表2”)。单元格(i,25)。副本
工作表(“Sheet1”).单元格(erow+1,4).粘贴特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
工作表(“表2”)。单元格(i、3)。副本
工作表(“Sheet1”).单元格(erow+1,5).粘贴特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
工作表(“表2”)。单元格(i,4)。副本
工作表(“Sheet1”).单元格(erow+1,6).粘贴特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
工作表(“表2”)。单元格(i、5)。副本
工作表(“Sheet1”).单元格(erow+1,7).粘贴特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
工作表(“表2”)。单元格(i,6)。副本
工作表(“Sheet1”).单元格(erow+1,8).粘贴特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
工作表(“表2”)。单元格(i,21)。副本
工作表(“Sheet1”).单元格(erow+1,9).粘贴特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
如果结束
接下来我
端接头
宏调用列表中的每个销售人员

Sub All()
如果工作表(“Sheet1”).Range(“L7”).Value”为“”,请致电CopySalesMan2
如果有工作表(“Sheet1”).Range(“L8”).Value”,请致电CopySalesMan3
如果工作表(“Sheet1”).Range(“L9”).Value”为“”,请致电CopySalesMan4
如果工作表(“Sheet1”).Range(“L10”).Value”为“”,请致电CopySalesMan5
端接头
表1

表2(数据库)
我得到了解决方案:

正如布拉克斯所说,
.value=.value
将是更好的选择

Sub CopySalesMan()
Application.ScreenUpdating = False
Dim XlWkSht As Worksheet, sVal As String, lRow As Long, i As Long, r As Long
Set XlWkSht = Worksheets("Sheet1")
lRow = XlWkSht.Range("D" & XlWkSht.Rows.Count).End(xlUp).Row
For i = 6 To 10
  If XlWkSht.Range("L" & i).Value <> "" Then
     sVal = XlWkSht.Range("L" & i).Value
    With Worksheets("Sheet2")
      For r = 2 To .Range("B" & .Rows.Count).End(xlUp).Row
        If .Range("Y" & r).Value2 = sVal Then
          lRow = lRow + 1
          XlWkSht.Range("B" & lRow).Value = .Range("B" & r).Value
          XlWkSht.Range("C" & lRow).Value = .Range("Y" & r).Value
          XlWkSht.Range("D" & lRow).Value = .Range("C" & r).Value
          XlWkSht.Range("E" & lRow).Value = .Range("D" & r).Value
          XlWkSht.Range("F" & lRow).Value = .Range("E" & r).Value
          XlWkSht.Range("G" & lRow).Value = .Range("F" & r).Value
          XlWkSht.Range("H" & lRow).Value = .Range("U" & r).Value
        End If
      Next r
    End With
  End If
Next
Application.ScreenUpdating = True
End Sub
子文案销售人员()
Application.ScreenUpdating=False
Dim XlWkSht作为工作表,sVal作为字符串,lRow作为长,i作为长,r作为长
Set XlWkSht=工作表(“表1”)
lRow=XlWkSht.Range(“D”和XlWkSht.Rows.Count).End(xlUp).Row
对于i=6到10
如果XlWkSht.Range(“L”和i).Value“”则
sVal=XlWkSht.Range(“L”和i).Value
带工作表(“表2”)
对于r=2到.Range(“B”和.Rows.Count).End(xlUp).Row
如果.Range(“Y”&r).Value2=sVal,则
lRow=lRow+1
XlWkSht.Range(“B”和lRow).Value=.Range(“B”和r).Value
XlWkSht.Range(“C”和lRow).Value=.Range(“Y”和r).Value
XlWkSht.Range(“D”和lRow).Value=.Range(“C”和r).Value
XlWkSht.Range(“E”和lRow).Value=.Range(“D”和r).Value
XlWkSht.Range(“F”和lRow).Value=.Range(“E”和r).Value
XlWkSht.Range(“G”和lRow).Value=.Range(“F”和r).Value
XlWkSht.Range(“H”和lRow).Value=.Range(“U”和r).Value
如果结束
下一个r
以
如果结束
下一个
Application.ScreenUpdating=True
端接头

如果您的代码可以工作,但您只是想改进它,那么您的问题更适合代码审查:但要回答您的问题,您不需要使用速度较慢的复制/粘贴功能。您可以直接将值指定给单元格。有很多更好的方法可以做到这一点,但同样,您可以在代码审阅时与他人一起查看。因为您只希望值执行。value=.value,而不是复制然后粘贴。非常感谢!我不知道代码审查@布拉克斯:这是两个网站的主题。您可能希望查看并避免使用
.Text
。您可能想要查看@SiddharthRout,因此您建议我将
.text
更改为
.value2
?是的,您应该避免使用
.text
@SiddharthRout谢谢您的建议!