Vba Excel-如果值=corect工作表上的值筛选和复制-加速
我需要一些建议。 我的代码检查工作表“总计”中的单元格“E”和工作表“列表”中的单元格“B”,如果值相等,它将读取工作表“列表”中的单元格“A”(其中包含我所有工作表的名称),并将匹配线复制到正确的工作表中 我的脚本可以工作,但速度很慢。你对如何加快这个过程有什么建议吗 目前脚本逐行读取和复制,我想通过应用自动过滤器来加快进程,但不知道从哪里开始。。。 提前谢谢 这是我的真实脚本:Vba Excel-如果值=corect工作表上的值筛选和复制-加速,vba,excel,Vba,Excel,我需要一些建议。 我的代码检查工作表“总计”中的单元格“E”和工作表“列表”中的单元格“B”,如果值相等,它将读取工作表“列表”中的单元格“A”(其中包含我所有工作表的名称),并将匹配线复制到正确的工作表中 我的脚本可以工作,但速度很慢。你对如何加快这个过程有什么建议吗 目前脚本逐行读取和复制,我想通过应用自动过滤器来加快进程,但不知道从哪里开始。。。 提前谢谢 这是我的真实脚本: Sub copystatus() Dim LR As Long Dim LC As Integer
Sub copystatus()
Dim LR As Long
Dim LC As Integer
Dim LB As Long
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim cLista As String
Set ws = ThisWorkbook.sheets("totale")
Set ws2 = ThisWorkbook.sheets("liste")
LR = ws.Cells(Rows.Count, 5).End(xlUp).Row
LC = ws2.Cells(Rows.Count, 2).End(xlUp).Row
With ws
For x = 2 To LR
For i = 2 To LC
If .Cells(x, 5).value = ws2.Cells(i, 2).value Then
cLista = ws2.Cells(i, 1).value
Set ws3 = ThisWorkbook.sheets(cLista)
On Error GoTo ErrorHandler
LB = ws3.Cells(Rows.Count, 1).End(xlUp).Row
ws3.Rows(LB + 1).value = .Rows(x).value
ws3.Rows(1).value = .Rows(1).value
End If
Next i
Next x
End With
ErrorHandler:
End Sub
检查此项-增加应可见:
Sub copystatus()
Dim LR As Long
Dim LC As Integer
Dim LB As Long
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim cLista As String
Application.ScreenUpdating = False
Application.EnableEvents = False
Set ws = ThisWorkbook.sheets("totale")
Set ws2 = ThisWorkbook.sheets("liste")
LR = ws.Cells(Rows.Count, 5).End(xlUp).Row
LC = ws2.Cells(Rows.Count, 2).End(xlUp).Row
With ws
For x = 2 To LR
For i = 2 To LC
If .Cells(x, 5).value = ws2.Cells(i, 2).value Then
cLista = ws2.Cells(i, 1).value
Set ws3 = ThisWorkbook.sheets(cLista)
On Error GoTo ErrorHandler
LB = ws3.Cells(Rows.Count, 1).End(xlUp).Row
ws3.Rows(LB + 1).value = .Rows(x).value
ws3.Rows(1).value = .Rows(1).value
End If
Next i
Next x
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
ErrorHandler:
End Sub
最后,将ws、ws2、ws3设置为如下所示:
设置ws=nothing
设置ws2=nothing检查此项-增加值应可见:
Sub copystatus()
Dim LR As Long
Dim LC As Integer
Dim LB As Long
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim cLista As String
Application.ScreenUpdating = False
Application.EnableEvents = False
Set ws = ThisWorkbook.sheets("totale")
Set ws2 = ThisWorkbook.sheets("liste")
LR = ws.Cells(Rows.Count, 5).End(xlUp).Row
LC = ws2.Cells(Rows.Count, 2).End(xlUp).Row
With ws
For x = 2 To LR
For i = 2 To LC
If .Cells(x, 5).value = ws2.Cells(i, 2).value Then
cLista = ws2.Cells(i, 1).value
Set ws3 = ThisWorkbook.sheets(cLista)
On Error GoTo ErrorHandler
LB = ws3.Cells(Rows.Count, 1).End(xlUp).Row
ws3.Rows(LB + 1).value = .Rows(x).value
ws3.Rows(1).value = .Rows(1).value
End If
Next i
Next x
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
ErrorHandler:
End Sub
最后,将ws、ws2、ws3设置为如下所示:
设置ws=nothing
设置ws2=nothing我假设这是另一个后续宏? 由于您已经检查了该条件并在那里生成了工作表(cLista),因此最好首先复制那里的行。 根据Vityta的建议,禁用屏幕更新后,应运行正常 您可以尝试简化此部分:
Set ws3=thiswoolk.sheets(cLista)
关于错误转到错误处理程序
LB=ws3.Cells(Rows.Count,1).End(xlUp).Row
ws3.Rows(LB+1).value=.Rows(x).value
ws3.Rows(1).value=.Rows(1).value
如果不使用setforws3,只需在一行中引用您的目标,而不是执行多变量赋值,可能会更好
sheets(clista).行(sheets(clista).单元格(Rows.Count,1).结束(xlUp).行+1.值=.Rows(x)值
sheets(clista).Rows(1).value=.Rows(1)value
我假设这是另一个后续宏?
由于您已经检查了该条件并在那里生成了工作表(cLista),因此最好首先复制那里的行。
根据Vityta的建议,禁用屏幕更新后,应运行正常
您可以尝试简化此部分:
Set ws3=thiswoolk.sheets(cLista)
关于错误转到错误处理程序
LB=ws3.Cells(Rows.Count,1).End(xlUp).Row
ws3.Rows(LB+1).value=.Rows(x).value
ws3.Rows(1).value=.Rows(1).value
如果不使用setforws3,只需在一行中引用您的目标,而不是执行多变量赋值,可能会更好
sheets(clista).行(sheets(clista).单元格(Rows.Count,1).结束(xlUp).行+1.值=.Rows(x)值
工作表(clista).Rows(1).value=.Rows(1)value
类似的内容,从一个2列数据集开始
将给出如下输出(C列到D列)
类似的内容,从两列数据集开始 将给出如下输出(C列到D列)
我应用了您建议的更改,但不幸的是,我没有看到执行速度有任何提高。谢谢,你抄了我的密码吗?速度绝对没有提高?@Ruif0禁用屏幕更新肯定会加快速度。每个工作表中有多少条记录(LR和LC的值)?关闭计算并使用数组而不是范围?pav LR为783行和59行LC。此脚本始终是上一个项目的一部分。
好的,pav和Vityata,我将您的所有建议应用到我的代码中,它运行得更快,非常感谢
@Nathan_Sav我使用vba的时间很少,使用数组会给我带来很多困惑。。。你能给我一个如何用数组转换代码的例子吗?非常感谢。
我应用了您建议的更改,但不幸的是,我没有看到执行速度有任何提高。谢谢,你抄了我的密码吗?速度绝对没有提高?@Ruif0禁用屏幕更新肯定会加快速度。每个工作表中有多少条记录(LR和LC的值)?关闭计算并使用数组而不是范围?pav LR为783行和59行LC。此脚本始终是上一个项目的一部分。
好的,pav和Vityata,我将您的所有建议应用到我的代码中,它运行得更快,非常感谢
@Nathan_Sav我使用vba的时间很少,使用数组会给我带来很多困惑。。。你能给我一个如何用数组转换代码的例子吗?非常感谢。
我会试试!!谢谢:DNice一号。我总是在范围内循环,这可能是我未来代码的更好选择。我会尝试!!谢谢:DNice一号。我总是循环遍历范围,这可能是我未来代码的更好选择。