NHG
Thành viên hoạt động
- Tham gia
- 15/1/07
- Bài viết
- 148
- Được thích
- 126
Hi các bạn
Mình tạo một hàm để lọc dữ liệu theo điều kiện với cú phát
Filter(Điều kiện; Cột điều kiện; Cột Kết quả; Số thứ tự)
ý tưởng là như này:
Gán cột điều kiện thành mảng có nhiều hàng và 1 cột; mở rộng mảng đó ra thành nhiều hàng và 2 cột
Duyệt điều kiện trong mảng; nếu trùng thì cột thứ 2 của mảng sẽ trả về số thứ tự của các ô thỏa mãn điều kiện
Hàm Filter sẽ so sánh số thứ tự trong đối số; nếu khớp số thứ tự trong mảng thì trả về kết quả
Nhưng do mình dùng nhiều vòng lặp quá nên công thức chạy rất ì ạch; dưới 5000 dòng dữ liệu thì ko sao, chứ nhiều hơn là ngồi chơi xơi nước ngay
Các bạn xem giúp m nhé
Function Filter_DieuKien_CotDieuKien_CotKetQua_STT(ByVal dk As String, ByVal vungdk As Range, ByVal mang As Range, ByVal STT As String)
Dim Dic As Object, arr(), sArray, i, j As Long, Item, Tmp
sArray = mang.Value
arr = vungdk.Value
ReDim Preserve sArray(1 To UBound(sArray), 1 To 2)
ReDim daura(1 To UBound(arr), 1 To 2)
For i = 1 To UBound(arr)
If UCase(arr(i, 1)) Like UCase(dk) Then
j = j + 1
daura(j, 1) = sArray(i, 1)
daura(j, 2) = j
End If
Next
For i = 1 To UBound(arr)
If STT = daura(i, 2) Then
kq = daura(i, 1)
End If
Next
Filter_DieuKien_CotDieuKien_CotKetQua_STT = kq
End Function
Mình tạo một hàm để lọc dữ liệu theo điều kiện với cú phát
Filter(Điều kiện; Cột điều kiện; Cột Kết quả; Số thứ tự)
ý tưởng là như này:
Gán cột điều kiện thành mảng có nhiều hàng và 1 cột; mở rộng mảng đó ra thành nhiều hàng và 2 cột
Duyệt điều kiện trong mảng; nếu trùng thì cột thứ 2 của mảng sẽ trả về số thứ tự của các ô thỏa mãn điều kiện
Hàm Filter sẽ so sánh số thứ tự trong đối số; nếu khớp số thứ tự trong mảng thì trả về kết quả
Nhưng do mình dùng nhiều vòng lặp quá nên công thức chạy rất ì ạch; dưới 5000 dòng dữ liệu thì ko sao, chứ nhiều hơn là ngồi chơi xơi nước ngay
Các bạn xem giúp m nhé
Function Filter_DieuKien_CotDieuKien_CotKetQua_STT(ByVal dk As String, ByVal vungdk As Range, ByVal mang As Range, ByVal STT As String)
Dim Dic As Object, arr(), sArray, i, j As Long, Item, Tmp
sArray = mang.Value
arr = vungdk.Value
ReDim Preserve sArray(1 To UBound(sArray), 1 To 2)
ReDim daura(1 To UBound(arr), 1 To 2)
For i = 1 To UBound(arr)
If UCase(arr(i, 1)) Like UCase(dk) Then
j = j + 1
daura(j, 1) = sArray(i, 1)
daura(j, 2) = j
End If
Next
For i = 1 To UBound(arr)
If STT = daura(i, 2) Then
kq = daura(i, 1)
End If
Next
Filter_DieuKien_CotDieuKien_CotKetQua_STT = kq
End Function