File Excel chạy chậm khi dùng code dò tìm với 2 điều kiện

Liên hệ QC

concangua

Thành viên mới
Tham gia ngày
15 Tháng tám 2007
Bài viết
3
Được thích
1
Mình có sử dụng code dò tìm giá trị với hai điều kiện sưu tầm được trên PC Word nhưng khi đưa vào sử dụng thì mình thấy vào dự liệu rất chậm.

Không biết lý do gì? Bảng tính của mình chỉ có khoảng 1000 dòng và 10 sheet thôi. sao lại chậm nhỉ.

Làm ơn chỉ giúp.
 

yeudoi

Thành viên gắn bó
Thành viên BQT
Moderator
Tham gia ngày
12 Tháng sáu 2006
Bài viết
2,993
Được thích
7,191
Cái này bạn phải đưa code lên mọi người mới tìm ra chỗ chưa hợp lý và sửa cho bạn chứ nói chay thì biết nó như thế nào.
 

concangua

Thành viên mới
Tham gia ngày
15 Tháng tám 2007
Bài viết
3
Được thích
1
Dưới đây là code tôi sưu tầm được. Các bạn xem giúp.

Function FindTwoCondition(Table As Range, Val1 As Variant, Val1Occrnce As Integer, Val2 As Variant, Val2Col As Integer, ResultCol As Integer)
'Table la bang du lieu
'Val1 Dieu kien thu nhat
'Val1Occrnce gia tri thu n cua dieu kien trong cot
'Val2 dieu kien thu hai
'Val2Col cot thu n cua dieu kien thu 2
'ResultCol cot thu n can tim

Dim i As Integer, iCount As Integer
Dim rCol As Range

For i = 1 To Table.Rows.Count
If Table.Cells(i, 1) = Val1 And Table.Cells(i, Val2Col) = Val2 Then
iCount = iCount + 1
End If

If iCount = Val1Occrnce Then
FindTwoCondition = Table.Cells(i, ResultCol)
Exit For
End If
Next i
End Function
 

Mr Okebab

Ngon Ngất Ngây
Thành viên đã mất
Tham gia ngày
6 Tháng tám 2006
Bài viết
3,262
Được thích
3,776
concangua đã viết:
Dưới đây là code tôi sưu tầm được. Các bạn xem giúp.

Function FindTwoCondition(Table As Range, Val1 As Variant, Val1Occrnce As Integer, Val2 As Variant, Val2Col As Integer, ResultCol As Integer)
'Table la bang du lieu
'Val1 Dieu kien thu nhat
'Val1Occrnce gia tri thu n cua dieu kien trong cot
'Val2 dieu kien thu hai
'Val2Col cot thu n cua dieu kien thu 2
'ResultCol cot thu n can tim

Dim i As Integer, iCount As Integer
Dim rCol As Range

For i = 1 To Table.Rows.Count
If Table.Cells(i, 1) = Val1 And Table.Cells(i, Val2Col) = Val2 Then
iCount = iCount + 1
End If

If iCount = Val1Occrnce Then
FindTwoCondition = Table.Cells(i, ResultCol)
Exit For
End If
Next i
End Function

Đây là hàm tìm phần tử thứ n ở bảng thỏa mãn ở 2 hàng khác nhau.

Đây là vòng lặp bình thường, tuy nhiên mình không biết là nó có nhanh hơn vòng lặp For each không vì for each dùng offset rất nhanh.

Tuy nhiên nếu dùng quá nhiều hàm này thì đúng là chậm thật (hàm nào dùng vòng lặp mà chẳng thế)

Bạn có thể đưa File VD của bạn lên, biết đâu lại có giải pháp khác hay hơn.

Thân!
 

DOSNET

Thành viên gắn bó
Thành viên danh dự
Tham gia ngày
3 Tháng tám 2007
Bài viết
1,634
Được thích
2,363
Nghề nghiệp
E&A
Trời, chỉ có khoảng 1000 dòng và 10 Sheet chậm là đương nhiên. Máy của bác cấu hình như nào vậy?
 
Lần chỉnh sửa cuối:
Top Bottom