Hỏi: Tốc độ xử lý của các hàm tìm kiếm?

Liên hệ QC

autokiss

Thành viên hoạt động
Tham gia
22/12/07
Bài viết
173
Được thích
11
Chào các bạn, mình muốn hỏi tốc độ dò tìm của một số hàm tìm kiếm (gồm cả các công thức mảng) như: Vlookup, Lookup, Indirect... trong việc tìm kiếm dữ liệu theo 3-4 điều kiện tham chiếu thì hàm nào cho tốc độ nhanh nhất? Mình đang dùng hàm Lookup(2;1/...) nhưng mà tốc độ rất chậm nếu dữ liệu của mình lên đến vài nghìn dòng.
 
các thành viên GPE sẽ yêu cầu bạn đưa file của bạn lên , vì họ đâu biết bạn viết hàm ra sao ? cách tổ chức hàm cũng ảnh hưởng đến tốc độ mà , và đưa file lên thì họ mới trả lời cho bạn là đối với file này thì dùng hàm nào nhanh nhất
 
Chào các bạn, mình muốn hỏi tốc độ dò tìm của một số hàm tìm kiếm (gồm cả các công thức mảng) như: Vlookup, Lookup, Indirect... trong việc tìm kiếm dữ liệu theo 3-4 điều kiện tham chiếu thì hàm nào cho tốc độ nhanh nhất? Mình đang dùng hàm Lookup(2;1/...) nhưng mà tốc độ rất chậm nếu dữ liệu của mình lên đến vài nghìn dòng.

hàm lookup làm hàm mảng, nên vài nghìn dòng nó ko đứng hình là máy bạn mạnh rồi đó
tuy số liệu, bạn có thể tạo cột phụ
nhưng cách tốt nhất là xài vba
 
hàm lookup làm hàm mảng, nên vài nghìn dòng nó ko đứng hình là máy bạn mạnh rồi đó
tuy số liệu, bạn có thể tạo cột phụ
nhưng cách tốt nhất là xài vba


Mình upload file lên bạn xem giúp mình với nhé, trường hợp này mình chỉ ví dụ mỗi hàm Lookup thôi mà nó đã rất nặng rồi (Mình tham chiếu có 1 giá trị thôi, ngang với dùng Vlookup).

Mình tính toán cho cột G bên sheet "Gia tri tung Tbi" bằng VBA để test, bên sheet bên cạnh là dữ liệu. Cảm nhận code này của mình quá chậm, chậm hơn nhiều so với dùng hàm.

Mình muốn tham chiếu với 3 điều kiện trùng cơ, trường hợp này mới 1 điều kiện thôi, chắc là khó mà nhanh được rồi, bạn giúp mình với nhé!
 

File đính kèm

Mình upload file lên bạn xem giúp mình với nhé, trường hợp này mình chỉ ví dụ mỗi hàm Lookup thôi mà nó đã rất nặng rồi (Mình tham chiếu có 1 giá trị thôi, ngang với dùng Vlookup).

Mình tính toán cho cột G bên sheet "Gia tri tung Tbi" bằng VBA để test, bên sheet bên cạnh là dữ liệu. Cảm nhận code này của mình quá chậm, chậm hơn nhiều so với dùng hàm.

Mình muốn tham chiếu với 3 điều kiện trùng cơ, trường hợp này mới 1 điều kiện thôi, chắc là khó mà nhanh được rồi, bạn giúp mình với nhé!

Vậy trong file của bạn, chỗ nào có LOOKUP đâu?
Mà bạn đang hỏi về tốc độ tính toán của các hàm, tự dưng lại xẹt qua "chuyện" VBA gì đó là sao?
 
Mình upload file lên bạn xem giúp mình với nhé, trường hợp này mình chỉ ví dụ mỗi hàm Lookup thôi mà nó đã rất nặng rồi (Mình tham chiếu có 1 giá trị thôi, ngang với dùng Vlookup).

Mình tính toán cho cột G bên sheet "Gia tri tung Tbi" bằng VBA để test, bên sheet bên cạnh là dữ liệu. Cảm nhận code này của mình quá chậm, chậm hơn nhiều so với dùng hàm.

Mình muốn tham chiếu với 3 điều kiện trùng cơ, trường hợp này mới 1 điều kiện thôi, chắc là khó mà nhanh được rồi, bạn giúp mình với nhé!

cho hỏi thêm
bạn muốn dùng cột D để xác định dòng cuối cùng của bảng dữ liệu của sheet "gia tri...."
sao cột D xóa trống trơn vậy?
Mã:
Sheets("Gia tri tung Tbi").[D65536].End(xlUp).Row
tôi dùng cột A thay thế được ko?
kết quả
Mã:
 "= 'Chi tiet xe, may Data1'!R" & t & "C10"
phải trả về dạng cthuc vậy hả? trả về trực tiếp là gái trị được ko?
==========
về code, khi bạn viết trực tiếp trên cell, thì nó như bạn làm bằng tay vậy, do đó nó làm xong một cell rồi làm cell kế tiếp, cho nên cái màn hình nó sẻ giựt giựt, vì vậy bân nên cho thêm 2 đoạn code này vào
Mã:
Application.ScreenUpdating = False
...............................
code cua bạn
.................................
Application.ScreenUpdating = True

khi dùng mảng, (có thể dùng cả dictionary), nó sẻ nhanh hơn
=========
bạn trả lời các ý tôi hỏi trên, tôi sẻ dùng mảng làm thử
 
Vậy trong file của bạn, chỗ nào có LOOKUP đâu?
Mà bạn đang hỏi về tốc độ tính toán của các hàm, tự dưng lại xẹt qua "chuyện" VBA gì đó là sao?

Mình đã dùng Lookup từ cột F đến cột J nhưng vừa rồi có thử vba bằng cột G thôi bạn à. Nếu thử hết bằng Lookup sẽ rất chậm lúc thêm dòng và chỉnh sửa dữ liệu (nếu hàng nghìn dòng).

Trong file mình gửi ở bên Sheet viết hàm mình muốn khi gõ vào "Khoan T4" chẳng hạn thì cột G sẽ hiển thị chi tiết nó là "Khoan xoay cầu số T4"; Cột H sẽ là hiển thị dung tích, năng lực máy; Cột I hiển thị luôn phân loại ABC của máy; Cột J hiển thị cấp bảo đưỡng máy. Tất cả dữ liệu lấy từ bên sheet "Chi tiet xe, may Data1".

Mình muốn dùng công thức hơn nhưng vì nó quá chậm nếu 1000 dòng thì việc thêm dòng, xóa dòng (cái này dùng nhiều) sẽ rất mất thời gian. Mình muốn dùng công thức hơn việc dùng VBA vì nó tiện lợi hơn nhưng vì dùng hàm mà chậm vậy, VBA lại nhanh thì vẫn hay hơn (hàm mình biết ít nhưng vba thì mình gần như mù tịt).

cho hỏi thêm
bạn muốn dùng cột D để xác định dòng cuối cùng của bảng dữ liệu của sheet "gia tri...."
sao cột D xóa trống trơn vậy?
......................................

Mình chỉ tham khảo code rồi chỉnh sửa một tí trong file của mình thôi nhưng việc dùng code mình muốn nó thực hiện từ đầu đến cuối của cột D để update dữ liệu, dữ từ cột A tham chiếu với sheet bên cạnh phải chính xác.

Kết quả trả về text hoặc number đều được, vì mình không biết chỉnh sửa code đoạn đấy như nào nên để nguyên thế.

Mình dùng screen update rồi nhưng mà nó chỉ nhanh hơn một chút hoặc vẫn như trước, không thể áp dụng được bạn à.

Mình không biết file của mình nặng chủ yếu do cái gì mà việc thêm dòng/xóa dòng lại lâu như vậy? Mình dùng name đã nhẹ đi được một chút rồi đấy.
 
Mình không biết file của mình nặng chủ yếu do cái gì mà việc thêm dòng/xóa dòng lại lâu như vậy? Mình dùng name đã nhẹ đi được một chút rồi đấy.
Nếu thế thì ở Tab Formulas => Calculation Option =>Manual. Sau khi thêm bớt dòng, cập nhật dữ liệu gì đấy xong hết rồi thì chọn lại Automatic
 
Mình chỉ tham khảo code rồi chỉnh sửa một tí trong file của mình thôi nhưng việc dùng code mình muốn nó thực hiện từ đầu đến cuối của cột D để update dữ liệu, dữ từ cột A tham chiếu với sheet bên cạnh phải chính xác.

Kết quả trả về text hoặc number đều được, vì mình không biết chỉnh sửa code đoạn đấy như nào nên để nguyên thế.

Mình dùng screen update rồi nhưng mà nó chỉ nhanh hơn một chút hoặc vẫn như trước, không thể áp dụng được bạn à.

Mình không biết file của mình nặng chủ yếu do cái gì mà việc thêm dòng/xóa dòng lại lâu như vậy? Mình dùng name đã nhẹ đi được một chút rồi đấy.

tôi thấy bên sheet "chitiet" cột F đã được sắp xếp các chủng loại liền kề nhau, vì vậy dù dùng cthức hay code bạn hãy lợi dụng điểm này, code tôi viết như sau:
Mã:
Private Sub cmdTest_Click()
Dim GTriTb, Chitiet As Variant, timsoxe As Range, i As Long

With Sheet3
    GTriTb = .[a2].Resize(.[a60000].End(3).Row, 2)
End With

With Sheet4
    Chitiet = .[a3].Resize(.[a60000].End(3).Row, 13)
End With
ReDim kq(1 To UBound(GTriTb), 1 To 5)

For i = 1 To UBound(GTriTb)
    If GTriTb(i, 1) <> "" And GTriTb(i, 2) <> "" Then
        Set timsoxe = Sheet4.[f:f].Find(GTriTb(i, 1), , , xlValue)
        If Not timsoxe Is Nothing Then
            k = timsoxe.Row - 2 + Val(Left(GTriTb(i, 2), 1) = "T")
            kq(i, 1) = GTriTb(i, 2)
            kq(i, 2) = Chitiet(k, 2)
            kq(i, 3) = Chitiet(k, 10)
            kq(i, 4) = Chitiet(k, 4)
            kq(i, 5) = Chitiet(k, 5)
        End If
    End If
Next
[e2].Resize(i, 5) = kq
End Sub
kết quả cho các cột từ E đến I
 
Nếu thế thì ở Tab Formulas => Calculation Option =>Manual. Sau khi thêm bớt dòng, cập nhật dữ liệu gì đấy xong hết rồi thì chọn lại Automatic

Nếu làm thế thì không tiện bạn à.

kết quả cho các cột từ E đến I

Code của bạn cho ra kết quả không đầy đủ rồi bạn à, nhưng mà tốc độ xử lý rất nhanh.
 
số liệu bạn nhiều quá mình ko kiểm tra nổi để biết nó sai hay thiếu ở dòng nào?

Nó bị lỗi trống dữ liệu ở hầu hết các dòng bạn à. Hồi trước mình dùng hàm VLOOKUP không bị chậm thế này đâu, giờ dùng cái LOOKUP(2;1/... ) này có vẻ rất chậm. Để mình thử lại hàm VLOOKUP xem thế nào.
 
Mình làm lại bằng VLOOKUP thì thấy tốc độ nhanh hơn nhiều lắm bạn à, trước mình làm bằng hàm này nhưng sau lại đổi tất cả thành LOOKUP nên mới bị chậm như vậy. Khả năng do hàm LOOKUP nó tham chiếu qua nhiều khâu nên mới chậm, hàm VLOOKUP thì nó không cần biết, cứ tham chiếu 1 cái đúng thì đúng còn không thì N/A nên nó mới nhanh vậy.
 
Mình làm lại bằng VLOOKUP thì thấy tốc độ nhanh hơn nhiều lắm bạn à, trước mình làm bằng hàm này nhưng sau lại đổi tất cả thành LOOKUP nên mới bị chậm như vậy. Khả năng do hàm LOOKUP nó tham chiếu qua nhiều khâu nên mới chậm, hàm VLOOKUP thì nó không cần biết, cứ tham chiếu 1 cái đúng thì đúng còn không thì N/A nên nó mới nhanh vậy.

hình như bạn chưa hiểu về hàm vlookup và lookup???
lookup là hàm mảng, đương nhiên nó năng hơn vlookup nhiều rồi
khi người ta tìm nhiều điều kiện, " cực mà chẳng đã" thì người ta phải mới phải xài lookup
 
hình như bạn chưa hiểu về hàm vlookup và lookup???
lookup là hàm mảng, đương nhiên nó năng hơn vlookup nhiều rồi
khi người ta tìm nhiều điều kiện, " cực mà chẳng đã" thì người ta phải mới phải xài lookup

Đúng rồi bạn à, VLOOKUP nó chỉ tìm 1 điều kiện thôi nên nó xử lý nhanh hơn. Trường hợp xử lý nhiều điều kiện mình làm ở Sheet khác không liên quan đến 2 sheets vừa rồi nên mình thấy chậm, hồi trước đang làm hàm LOOKUP mình tiện chuyển luôn và chưa nghĩ đến tốc độ xử lý nên bây giờ dữ liệu nhiều mới phát hiện ra.
 
Web KT

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

Back
Top Bottom