Không sử dụng vòng lặp với FIND (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

keke355992

Thành viên thường trực
Tham gia
19/1/08
Bài viết
310
Được thích
20
Nghề nghiệp
KẾ TOÁN THUẾ, TƯ VẪN THUẾ
Xin chào các AC trong diễn đàn. E có file đính kèm nhờ các AC xem giúp ạ. Trước e sử dụng sự kiện Change, kết hợp hàm Vlookup, rùi Value giá trị, nhưng nó cũng có nhiều bất tiện. Hiện tại E thử sử dụng phương thức tìm kiếm Find để thay thế cho hàm Vlookup, nhưng ngặt nỗi là bị mắc vào vòng lặp, nếu dữ liệu hơn 1000 dòng thui là quay quay rùi, Vậy có giải pháp nào nhanh hơn ko ạ
 

File đính kèm

Xin chào các AC trong diễn đàn. E có file đính kèm nhờ các AC xem giúp ạ. Trước e sử dụng sự kiện Change, kết hợp hàm Vlookup, rùi Value giá trị, nhưng nó cũng có nhiều bất tiện. Hiện tại E thử sử dụng phương thức tìm kiếm Find để thay thế cho hàm Vlookup, nhưng ngặt nỗi là bị mắc vào vòng lặp, nếu dữ liệu hơn 1000 dòng thui là quay quay rùi, Vậy có giải pháp nào nhanh hơn ko ạ
Để nhanh bạn phải nêu rõ mục đích của bạn là gì, chứ ngoồi dịch ngược code của bạn xem bạn muốn gì rồi mới chỉnh cho phù hợp thì đến tết công gô quá.
 
Upvote 0
Với mình thì, hiếm khi đọc Code không tường minh!

Bạn xem lại dòng lệnh này:

Mã:
cls(1, 7) = Sheets("KHO1").[B]Cells[/B].Find(cls(1, -1), , , 2)(1, 16)
Cần giới hạn vùng tìm thì sẽ nhanh hơn, không thể tìm bừa fứa thế được.
Thường thì chỉ tìm trên 1 cột hay 1 hàng nào đó; Cùng lằm là 1 vùng ô hữu hạn mà thôi.

[Riêng mình, rất kị cách viết
.End(3)!
hay
.Find(cls(1, -1), , , 2)(1, 16)
. . . ]
 
Upvote 0
Để nhanh bạn phải nêu rõ mục đích của bạn là gì, chứ ngoồi dịch ngược code của bạn xem bạn muốn gì rồi mới chỉnh cho phù hợp thì đến tết công gô quá.

Dạ mục đích là để bảng tính nó k có công thức ý ạ. Vì tận hơn 10.000 dòng cơ ạ. A xem sự kiện change cũ, e dùng vlookup, sau đó value giá trị đó ạ. Bjo e mún dùng toàn bộ bằng code VBA, xem bảng tính có chạy nhanh hơn ko
 
Upvote 0
Với mình thì, hiếm khi đọc Code không tường minh!

Bạn xem lại dòng lệnh này:

Mã:
cls(1, 7) = Sheets("KHO1").[B]Cells[/B].Find(cls(1, -1), , , 2)(1, 16)
Cần giới hạn vùng tìm thì sẽ nhanh hơn, không thể tìm bừa fứa thế được.
Thường thì chỉ tìm trên 1 cột hay 1 hàng nào đó; Cùng lằm là 1 vùng ô hữu hạn mà thôi.

[Riêng mình, rất kị cách viết
.End(3)!
hay
.Find(cls(1, -1), , , 2)(1, 16)
. . . ]

Vâng e hỉu rùi. Nhưng có thể thay đổi để nó chỉ duyệt tại dòng mình chọn thay vì duyệt qa từng dòng đc ko ạ.
 
Upvote 0
Fương thức tìm kiếm Find() sẽ nhanh hơn duyệt từng ô trong 1 vùng;
Còn muốn nhanh hơn nữa thì đưa vô mảng (Array) mà duyệt
Muốn duyệt ở dòng nào thì đưa các ô dòng đó vô biến vùng rồi duyệt
như
Dim Rng As Range, sRng As Range
For Each Cls In Range("A3:A" & [B65500].En(xlUp).Row)
If Cls.Row Mod 9 = 2 Then
Set Rng = Cls.Reize(,99)
Set sRng=Rng.Find("GPE.COM",,xlFormuals, xlPart)
If sRng Is Nothing Then
MsgBox "Nothing"
Else
MsgBox sRng.Value
End If
End If
Next Cls
 
Upvote 0

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

Back
Top Bottom