cả nhà giúp em lọc dư liệu theo tên người thực hiện hợp đồng giúp em với ạ (1 người xem)

Liên hệ QC

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

tuongktt

Thành viên mới
Tham gia
19/4/20
Bài viết
36
Được thích
4
cả nhà giúp em với ạ, em muốn lọc dư liêu theo tên người thực hiện hợp đồng thành sheet riêng: tùng, miền, huỳnh, sơn ạ
1587692590455.png
 

File đính kèm

  • 1587692480993.png
    1587692480993.png
    67 KB · Đọc: 2
  • hõ rợ.xls
    hõ rợ.xls
    38.5 KB · Đọc: 5
Dùng Vba cũng được, theo mình đơn giản hơn bạn nên dùng Advance filter như anh Thương gợi ý. Tập dùng google cho quen, trên google có hướng dẫn rất cụ thể
 
Thời nay mà còn dùng đồ cổ .xls :p
Anh ơi Anh xem hộ em cái hàm My_Vlookup được không ạ
Em đang phải duyệt qua mảng kết quả để bỏ phần tử thừa rồi mới đưa vào hàm ResizeKQ. Do đó nó bị chậm một chút. Mong Anh xem giúp em nhé
 
Lần chỉnh sửa cuối:
Anh ơi Anh xem hộ em cái hàm My_Vlookup được không ạ
Em đang phải duyệt qua mảng kết quả để bỏ phần tử thừa rồi mới đưa vào hàm ResizeKQ. Do đó nó bị chậm một chút. Mong Anh xem giúp em nhé
Chậm không do duyệt mảng kết quả mà do mấy cái lùm xùm ép bảng tính, tính lại vùng dữ liệu
 
Trong Function nên bỏ bớt 1 vòng "For J=1 ..." theo cột
Dạ đúng rồi Anh ạ. Cám ơn Anh nhiều ạ
Em sửa lại như thế này
Mã:
Function My_Vlookup(ByVal Lookup_Value, ByVal Table_Array As Range, ByVal Col_Index As Long)
    Dim sArr(), tArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Idx As Long
sArr = Table_Array.value
ReDim tArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr)
    If Lookup_Value = sArr(I, Col_Index) Then
        K = K + 1:  tArr(K, 1) = I
    End If
Next I
R = K: K = 0
ReDim dArr(1 To R, 1 To UBound(sArr, 2))
For I = 1 To R
    K = K + 1: Idx = tArr(I, 1)
    For J = 1 To UBound(sArr, 2)
        dArr(K, J) = sArr(Idx, J)
    Next J
Next I
If K Then My_Vlookup = ResizeKQ(dArr)
End Function
 
Cái này chỉ việc filter rồi copy/paste visible lại từng chết thôi. Cốt kiếc thì cũng giải thuật đó. Làm tùm lùm chi cho mệt.

Giải thuật khác nếu cốt:
- copy cả sheet ra 1 sheet khác
- sort theo tên
- copy cả sheet ra từng sheet khác và dùng hàm Match(tên... để tìm dòng đầu, dùng Match(tên & "1"... để tìm dòng cuối
- delete các dòng còn lại.
 
Dạ đúng rồi Anh ạ. Cám ơn Anh nhiều ạ
Em sửa lại như thế này
Mã:
Function My_Vlookup(ByVal Lookup_Value, ByVal Table_Array As Range, ByVal Col_Index As Long)
    Dim sArr(), tArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Idx As Long
sArr = Table_Array.value
ReDim tArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr)
    If Lookup_Value = sArr(I, Col_Index) Then
        K = K + 1:  tArr(K, 1) = I
    End If
Next I
R = K: K = 0
ReDim dArr(1 To R, 1 To UBound(sArr, 2))
For I = 1 To R
    K = K + 1: Idx = tArr(I, 1)
    For J = 1 To UBound(sArr, 2)
        dArr(K, J) = sArr(Idx, J)
    Next J
Next I
If K Then My_Vlookup = ResizeKQ(dArr)
End Function
For I = 1 To R
K = K + 1: Idx = tArr(I, 1)
For J = 1 To UBound(sArr, 2)
dArr(K, J) = sArr(Idx, J)
Next J
Next I
K = K + 1 không cần vì k luôn bằng I
Bỏ luôn R = K: K = 0
 
Web KT

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

Back
Top Bottom