Mình xin cách tối ưu tốc độ xử lý của code xóa dòng trống xét điều kiện là cột L trống thì xóa hàng đó.

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

tvphong192

Thành viên mới
Tham gia
13/12/22
Bài viết
8
Được thích
0
Sub Macro1()
Dim Cot_kt As String

Dim i&, Dong_dau&

Dong_dau = 4

Cot_kt = "L"

For i = Range(Cot_kt & Rows.Count).End(xlUp).Row To Dong_dau Step -1

If Range(Cot_kt & i).Value = "" Then Range(Cot_kt & i).EntireRow.Delete

Next
End Sub
 

File đính kèm

Dữ liệu trên file của bạn là ít nên chưa thể nói nhanh hay chậm,. . .
Ta có thể cải thiện bằng cách thô thiển nhất như sau:
Thay vì tìm thấy dòng nào ta 'xào' dòng ý, thì thử phương thức Union gom hết chúng lại & xóa 1 lần;
Có thể sẽ có nhiều cách khác nữa, mong bạn từ từ tìm hiểu thêm;

Tiện đây xin nhắc bạn trong câu lệnh
Mã:
For i = Range(Cot_kt & Rows.Count).End(xlUp).Row To . . . .  Step . . .
sẽ không xóa những dòng có khi là cần xóa
 
Xài đỡ cái này: Thay vì Loop từ dòng rồi delete thì chọn tất cả các dòng trống 1 lần và delete 1 lần thôi

PHP:
Sub Macro1()
Dim Cot_kt As String
Dim Dong_dau&, Dong_cuoi&
Cot_kt = "L"
Dong_dau = 4
Dong_cuoi = Cells(Rows.Count, "M").End(xlUp).Row
Range(Cells(Dong_dau, Cot_kt), Cells(Dong_cuoi, Cot_kt)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
 
Sub Macro1() Dim Cot_kt As String Dim Dong_dau&, Dong_cuoi& Cot_kt = "L" Dong_dau = 4 Dong_cuoi = Cells(Rows.Count, "M").End(xlUp).Row Range(Cells(Dong_dau, Cot_kt), Cells(Dong_cuoi, Cot_kt)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Xài đỡ cái này: Thay vì Loop từ dòng rồi delete thì chọn tất cả các dòng trống 1 lần và delete 1 lần thôi

PHP:
Sub Macro1()
Dim Cot_kt As String
Dim Dong_dau&, Dong_cuoi&
Cot_kt = "L"
Dong_dau = 4
Dong_cuoi = Cells(Rows.Count, "M").End(xlUp).Row
Range(Cells(Dong_dau, Cot_kt), Cells(Dong_cuoi, Cot_kt)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Dữ liệu trên file của bạn là ít nên chưa thể nói nhanh hay chậm,. . .
Ta có thể cải thiện bằng cách thô thiển nhất như sau:
Thay vì tìm thấy dòng nào ta 'xào' dòng ý, thì thử phương thức Union gom hết chúng lại & xóa 1 lần;
Có thể sẽ có nhiều cách khác nữa, mong bạn từ từ tìm hiểu thêm;

Tiện đây xin nhắc bạn trong câu lệnh
Mã:
For i = Range(Cot_kt & Rows.Count).End(xlUp).Row To . . . .  Step . . .
sẽ không xóa những dòng có khi là cần xóa
Thực tế dữ liệu trên file thực tế
Dữ liệu trên file của bạn là ít nên chưa thể nói nhanh hay chậm,. . .
Ta có thể cải thiện bằng cách thô thiển nhất như sau:
Thay vì tìm thấy dòng nào ta 'xào' dòng ý, thì thử phương thức Union gom hết chúng lại & xóa 1 lần;
Có thể sẽ có nhiều cách khác nữa, mong bạn từ từ tìm hiểu thêm;

Tiện đây xin nhắc bạn trong câu lệnh
Mã:
For i = Range(Cot_kt & Rows.Count).End(xlUp).Row To . . . .  Step . . .
sẽ không xóa những dòng có khi là cần xóa

Sub Macro1()
Dim Cot_kt As String

Dim i&, Dong_dau&

Dong_dau = 4

Cot_kt = "L"

For i = Range(Cot_kt & Rows.Count).End(xlUp).Row To Dong_dau Step -1

If Range(Cot_kt & i).Value = "" Then Range(Cot_kt & i).EntireRow.Delete

Next
End Sub
Xài đỡ cái này: Thay vì Loop từ dòng rồi delete thì chọn tất cả các dòng trống 1 lần và delete 1 lần thôi

PHP:
Sub Macro1()
Dim Cot_kt As String
Dim Dong_dau&, Dong_cuoi&
Cot_kt = "L"
Dong_dau = 4
Dong_cuoi = Cells(Rows.Count, "M").End(xlUp).Row
Range(Cells(Dong_dau, Cot_kt), Cells(Dong_cuoi, Cot_kt)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
E cảm ơn anh nhé! e không rành về VBA cho lắm nhưng code a Edit đã chạy nhanh hơn rội ạ
Bài đã được tự động gộp:

Dữ liệu trên file của bạn là ít nên chưa thể nói nhanh hay chậm,. . .
Ta có thể cải thiện bằng cách thô thiển nhất như sau:
Thay vì tìm thấy dòng nào ta 'xào' dòng ý, thì thử phương thức Union gom hết chúng lại & xóa 1 lần;
Có thể sẽ có nhiều cách khác nữa, mong bạn từ từ tìm hiểu thêm;

Tiện đây xin nhắc bạn trong câu lệnh
Mã:
For i = Range(Cot_kt & Rows.Count).End(xlUp).Row To . . . .  Step . . .
sẽ không xóa những dòng có khi là cần xóa
Thực tế dữ liệu trên file là nhiều hơn và mình cũng không rành về VBA nên phải Recog Macro để lấy code nên tốc độ xử lý chưa được nhanh>
 
Xài đỡ cái này: Thay vì Loop từ dòng rồi delete thì chọn tất cả các dòng trống 1 lần và delete 1 lần thôi

PHP:
Sub Macro1()
'. . . . . . . . . . '
Dong_cuoi = Cells(Rows.Count, "M").End(xlUp).Row
Range(Cells(Dong_dau, Cot_kt), Cells(Dong_cuoi, Cot_kt)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub


BeBo chưa đề phòng trường hợp như vầy:


DòngPart NameSpecHB
4​
1​
5​
2203-000627C-CER,CHIP;22pF,5%,50V,C0G,TP,1005,T0.5,C-CER,CHIP
6​
2007-007142R-CHIP;10Kohm,1%,1/16W,TP,1005,T0.35R-CHIP
7​
2007-007798R-CHIP;10ohm,1%,1/16W,TP,1005,T0.35R-CHIP
8​
2007-000170R-CHIP;1Mohm,5%,1/16W,TP,1005,T0.35R-CHIP
9​
2203-006048C-CER,CHIP;100nF,10%,10V,X7R,TP,1005,T0.C-CER,CHIP
10​
0406-001810DIODE-TVS;uClamp2461P,27V,32V,36V,23000MDIODE-TVS
11​
1405-001271VARISTOR;35V,20VDC,5A,1005,TP,100V,10pFVARISTOR
12​
2007-007766R-CHIP;2Kohm,1%,1/16W,TP,1005,T0.35R-CHIP
13​
2007-000148R-CHIP;10Kohm,5%,1/16W,TP,1005,T0.35R-CHIP
14​
2007-000140R-CHIP;1Kohm,5%,1/16W,TP,1005,T0.35R-CHIP
15​
2007-000171R-CHIP;0ohm,5%,1/16W,TP,1005,T0.35R-CHIP
16​
2203-007544C-CER,CHIP;100nF,10%,50V,X7R,TP,1005,T0.C-CER,CHIP
17​
2007-000109R-CHIP;1Mohm,5%,1/10W,TP,1608R-CHIP
18​
2007-000162R-CHIP;100Kohm,5%,1/16W,TP,1005,T0.35R-CHIP
19​
2007-000137R-CHIP;2Kohm,5%,1/16W,TP,1005R-CHIP
20​
2007-000157R-CHIP;47Kohm,5%,1/16W,TP,1005,T0.35R-CHIP
21​
2007-000138R-CHIP;100ohm,5%,1/16W,TP,1005,T0.35R-CHIP
22​
2007-000174R-CHIP;47ohm,5%,1/16W,TP,1005,T0.35R-CHIP
23​
2007-007588R-CHIP;1.8Kohm,1%,1/16W,TP,1005,T0.3R-CHIP
24​
2007-008779R-CHIP;0ohm,5%,1/16W,TP,1005,T0.35,GenerR-CHIP
#N/A
#N/A​
#N/A
#N/A​
27​
2203-000812C-CER,CHIP;33pF,5%,50V,C0G,TP,1005,-55toC-CER,CHIP
28​
2007-007142R-CHIP;10Kohm,1%,1/16W,TP,1005,T0.35R-CHIP
29​
2203-000627C-CER,CHIP;22pF,5%,50V,C0G,TP,1005,T0.5,C-CER,CHIP
30​
2007-007136R-CHIP;4.7Kohm,1%,1/16W,TP,1005,T0.35R-CHIP
31​
2203-000679C-CER,CHIP;27pF,5%,50V,C0G,TP,1005,T0.5,C-CER,CHIP
32​
2203-006126C-CER,CHIP;47nF,10%,16V,X7R,TP,1005,T0.5C-CER,CHIP
#N/A
#N/A​
 
Web KT

Bài viết mới nhất

Back
Top Bottom