Lọc dữ liệu nhiều điều kiện (1 người xem)

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

Hungvk1704

Thành viên mới
Tham gia
24/2/21
Bài viết
7
Được thích
0
Xin chào!
Mình có file dữ liệu gồm 02 Sheet. Trong đó 01 sheet chứa dữ liệu. Ở sheet còn lại, mình muốn lọc ra những thông tin cần thiết từ sheet 01 thỏa mãn các điều kiện cụ thể mà không biết dùng phương pháp nào cho nhanh. Vậy nhờ mọi người chỉ giúp nhé! (Chi tiết mình có ghi chú trong file gửi kèm)
Cảm ơn mọi người!
 

File đính kèm

mình thấy cậu lọc từ 1 bảng ra làm 2 bảng nếu dữ liệu cố định thì không sao nhưng dữ liệu thường thêm bớt không cố định , theo mình cậu nên để 2 bảng lọc kết quả mỗi bảng 1 trang thì thuận tiện hơn
 
Xin chào!
Mình có file dữ liệu gồm 02 Sheet. Trong đó 01 sheet chứa dữ liệu. Ở sheet còn lại, mình muốn lọc ra những thông tin cần thiết từ sheet 01 thỏa mãn các điều kiện cụ thể mà không biết dùng phương pháp nào cho nhanh. Vậy nhờ mọi người chỉ giúp nhé! (Chi tiết mình có ghi chú trong file gửi kèm)
Cảm ơn mọi người!
Bạn tham khảo..
 

File đính kèm

Quá tuyệt, cảm ơn bạn nhiều nhé!
Bài đã được tự động gộp:

mình thấy cậu lọc từ 1 bảng ra làm 2 bảng nếu dữ liệu cố định thì không sao nhưng dữ liệu thường thêm bớt không cố định , theo mình cậu nên để 2 bảng lọc kết quả mỗi bảng 1 trang thì thuận tiện hơn
Cảm ơn bạn, nhưng mình cần nó vào chung 01 bảng để thuận tiện tra cứu và in giấy
 
Tôi thấy nên dùng Data Validation ở cell D2 thì hay hơn một chút.
Điểm quan trọng khi dùng Data Validation là tránh phải gõ Mã Tổ và cũng tránh việc gõ sai ký tự sẽ không hiển thị kết quả mong muốn
 

File đính kèm

Bạn có thể giải thích, hướng dẫn giúp mình hàm lấy danh sách khách hàng ở bên dưới không? Để mình áp dụng cho các file khác?
Hai bảng chỉ khác nhau ở điều kiện (=0, >0) và địa chỉ dòng bắt đầu trong công thức thôi, bạn xem công thức ở hai bảng rồi so sánh sẽ thấy sự khác nhau để điều chỉnh.
 
Lần chỉnh sửa cuối:
Hai bảng chỉ khác nhau ở điều kiện (=0 , >0) và địa chỉ dòng bắt đầu trong công thức thôi bạn, bạn xem công thức ở hai bảng rồi so sánh sẽ thấy sự khác nhau để điều chỉnh.
Ok bạn, mình làm được rồi!
Nhờ bạn bớt chút thời gian giúp mình giải quyết bài khác cái nhé!
(Mình ghi chú trong file gửi kèm)
Cảm ơn bạn rất nhiều!
 

File đính kèm

Ok bạn, mình làm được rồi!
Nhờ bạn bớt chút thời gian giúp mình giải quyết bài khác cái nhé!
(Mình ghi chú trong file gửi kèm)
Cảm ơn bạn rất nhiều!
Mình đã xem bài của bạn, dạng bài này trên diễn đàn GPE rất nhiều, bạn tìm hiểu và áp dụng thử, vướng chỗ nào thì đưa lên hỏi sẽ nhớ lâu hơn, mình làm cho bạn thì cũng được nhưng như thế kinh nghiệm của bạn là bằng không. Nhất trí không bạn.
 
Lần chỉnh sửa cuối:
Tôi thấy nên dùng Data Validation ở cell D2 thì hay hơn một chút.
Điểm quan trọng khi dùng Data Validation là tránh phải gõ Mã Tổ và cũng tránh việc gõ sai ký tự sẽ không hiển thị kết quả mong muốn
Bài này ở sheet To nên có 1 cột mã khách hàng nữa
 
Mình đã xem bài của bạn, dạng bài này trên diễn đàn GPE rất nhiều, bạn tìm hiểu và áp dụng thử, vướng chỗ nào thì đưa lên hỏi sẽ nhớ lâu hơn, mình làm cho bạn thì cũng được nhưng như thế kinh nghiệm của bạn là bằng không. Nhất trí không bạn.
Ok. Cảm ơn bạn nhé! Tại m cũng ko biết tìm ntn được nội dung phù hợp với nhu cầu
 
Ok. Cảm ơn bạn nhé! Tại m cũng ko biết tìm ntn được nội dung phù hợp với nhu cầu

Xin chào! Bạn có thể cho mình hỏi, công thức bạn giúp hôm trước có phải với dữ liệu lớn (Ví dụ mình đang có 15.000 dòng) thì có thể ko ra kết quả đúng không?
Bài đã được tự động gộp:

Xin chào! Bạn có thể cho mình hỏi, công thức bạn giúp hôm trước có phải với dữ liệu lớn (Ví dụ mình đang có 15.000 dòng) thì có thể ko ra kết quả đúng không?
Nếu ko phiền thì giúp mình hướng dẫn qua zalo nhé: 0983.911.908 - Mình đang rất cần cái này - Cảm ơn bạn!
 
Xin chào! Bạn có thể cho mình hỏi, công thức bạn giúp hôm trước có phải với dữ liệu lớn (Ví dụ mình đang có 15.000 dòng) thì có thể ko ra kết quả đúng không?
Bài đã được tự động gộp:

Nếu ko phiền thì giúp mình hướng dẫn qua zalo nhé: 0983.911.908 - Mình đang rất cần cái này - Cảm ơn bạn!
Vẫn chạy được nhưng nặng và chậm thôi bạn, nếu nhiều vậy nên dùng VBA bạn ạ. (Vui lòng không viết tắt bạn nhé)
 
Lần chỉnh sửa cuối:
Bạn muốn tự mình làm một cách dễ dàng thì xem video tôi hướng dẫn hơn 7 phút này nhé.
 

File đính kèm

Mình có file cần lấy dữ liệu như file kèm , bạn xem giúp . cám ơn bạn nhiều nhiều nhé

Tình huống này của bạn hoàn toàn làm được và chạy với tốc độ nhanh, nhưng cần viết thêm code VBA để chế mảng kết quả nữa, cũng khá mất thời gian.
 
Tình huống báo cáo của bạn tôi đã giải với code ngắn gọn và tốc độ chạy hàm nhanh. Tôi đang đố vui bài này cho các bạn khác ở trên Facebook, tôi sẽ sớm upload file kết quả lên đây.
 
Mình có file cần lấy dữ liệu như file kèm , bạn xem giúp . cám ơn bạn nhiều nhiều nhé

Bài của bạn tôi đã viết thành một hàm mảng động, chạy tự co giãn dòng và cột theo dữ liệu phát sinh. Chỉ cần cài Add-in A-Tools như bài trước mở file này là chạy được.
Download file: https://drive.google.com/file/d/1dakagNxO_nm4EFdNHV4LzPHTBzeYgv9X/view?usp=sharing

Mã nguồn tạo hàm trả về mảng động với yêu cầu bài toán trên:

C#:
Function TongVaTach(ByVal SQL As String, Optional ByVal Options As String = "")
    Dim fa As New BSFormulaArray
    Dim fi As New BSFormulaInfo
    Dim arr
    If fa.Begin Then
        fi.FunctionName = "TongVaTach"
        'Save parameters for using later. (in CallbackResult)
        fi.PARAMS = Array(SQL, Options)
        fi.OptionStr = Options
        fi.lpfnOnGetResult = GetCallbackFunction(AddressOf CallbackResult)
        TongVaTach = fa.Add(fi, arr)
    Else
        TongVaTach = fa.Result
    End If
    Set fi = Nothing
    Set fa = Nothing
End Function

Function CallbackResult(ByVal fi As AddinATools.IBSFormulaInfo, _
                        ByVal FmlRange As Range, _
                        ByVal FmlState As AddinATools.BSFmlState, _
                        AResult As Variant) As Boolean
    If FmlState = fsOnCalc Then
        'fi.PARAMS(0) is SQL input from function "TongVaTach"
        'fi.PARAMS(1) is OPTIONs input from function "TongVaTach"
        AResult = GetArr(fi.PARAMS(0), fi.PARAMS(1))
        CallbackResult = True
    ElseIf FmlState = fsBeforeUpdate Then
        'Do something
    End If
End Function

Private Function GetArr(ByVal SQL As String, Optional ByVal Options As String = "")
    Dim bf As New BSFunctions
    Dim arr, RST As Object, fa As New BSFormulaArray
    Dim lRow&, uRow&, lCol&, uCol&, I&, J&, MaxCols&, n&
    Set RST = fa.ExecuteQuery(SQL, Options)
    arr = fa.GetArrayFromRecordset(RST)
    'Convert array Rows-> Cols and assign value ...
    lRow = LBound(arr, 2): uRow = UBound(arr, 2)
    lCol = LBound(arr, 1): uCol = UBound(arr, 1)
    ReDim Arr2(uRow, uCol * 2)
    MaxCols = 0
    For I = lRow + 1 To uRow
        Arr2(I, lCol) = arr(lCol, I)
        n = 0
        For J = lCol + 1 To uCol
            If arr(J, I) <> "" Then
                n = n + 2
                Arr2(I, n - 1) = arr(J, I) 'Sl
                Arr2(I, n) = IIf(arr(J, lCol) = "", "Blank", arr(J, lCol)) 'Ngay ve
            End If
        Next J
        MaxCols = WorksheetFunction.Max(MaxCols, n)
    Next I
    'Write header row
    Dim MA, Sl, NGAY_VE
    n = 0
    Sl = Application.Range("SL").Value2
    NGAY_VE = Application.Range("NGAY_VE").Value2
    MA = Application.Range("MA").Value2
    Arr2(lRow, lCol) = MA
    For J = lCol + 1 To MaxCols Step 2
        n = n + 1
        Arr2(lRow, J) = Sl
        Arr2(lRow, J + 1) = NGAY_VE & " " & n
    Next J
    ReDim Arr3(uRow, MaxCols)
    For I = lRow To uRow
        For J = lCol To MaxCols
            Arr3(I, J) = Arr2(I, J)
            If Arr3(I, J) = 0 Then
                Arr3(I, J) = ""
            End If
        Next J
    Next I
    GetArr = Arr3
    RST.Close 'Free memory
    Erase arr
    Erase Arr2
    Set RST = Nothing
    Set bf = Nothing
    Set fa = Nothing
End Function
 

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

Back
Top Bottom