【发布时间】:2020-09-19 16:42:26
【问题描述】:
亲爱的,我是 VBA 的新手,在下面我为我的工作需要创建了这个 vba 宏,将数据行从 Sheet1 分配到不同的工作表 (2,3,4,5) 和列表表 (6),基于: 如果 sheet1 列 A 中的单元格值与 sheet6 列 A 匹配,则将 raw 从 sheet1 移动到 sheet2 如果 sheet1 列 A 中的单元格值与 sheet6 列 B 匹配,则将 raw 从 sheet1 移动到 sheet3 等等。 但我的代码花了很长时间(很慢) 需要你的帮助。
Sub distribute()
Application.ScreenUpdating = False
Dim Base As Worksheet
Dim List As Worksheet
Dim i As Integer
Dim LastRow As Long
Set Base = Sheets(1)
Set List = Sheets(7)
LastRow = Base.Cells(Base.Rows.Count, "B").End(xlUp).Row
For i = LastRow To 1 Step -1
For b = 2 To LastRow
If Base.Cells(i, 2).Value = List.Cells(b, 1).Value Then
Base.Rows(i).EntireRow.Copy _
Destination:=Sheets(2).Rows(Sheets(2).Cells(Sheets(2).Rows.Count, 1).End(xlUp).Row + 1).EntireRow
Base.Rows(i).EntireRow.Delete
Else
If Base.Cells(i, 2).Value = List.Cells(b, 2).Value Then
Base.Rows(i).EntireRow.Copy _
Destination:=Sheets(3).Rows(Sheets(3).Cells(Sheets(3).Rows.Count, 1).End(xlUp).Row + 1).EntireRow
Base.Rows(i).EntireRow.Delete
Else
If Base.Cells(i, 2).Value = List.Cells(b, 3).Value Then
Base.Rows(i).EntireRow.Copy _
Destination:=Sheets(4).Rows(Sheets(4).Cells(Sheets(4).Rows.Count, 1).End(xlUp).Row + 1).EntireRow
Base.Rows(i).EntireRow.Delete
Else
If Base.Cells(i, 2).Value = List.Cells(b, 4).Value Then
Base.Rows(i).EntireRow.Copy _
Destination:=Sheets(5).Rows(Sheets(5).Cells(Sheets(5).Rows.Count, 1).End(xlUp).Row + 1).EntireRow
Base.Rows(i).EntireRow.Delete
End If
End If
End If
End If
Next b
Next i
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
你不应该使用 .Copy- 这真的会降低性能
-
谢谢@Andy - 你有什么建议PLS。
-
您在每张纸上处理的数据集有多大?
-
大约 100 行
-
按多少列?
标签: vba