LỌC VÀ TÌM KIẾM NHIỀU ĐIỀU KIỆN (2 người xem)

Liên hệ QC

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

huonglien1901

GPE là ngôi nhà thứ 2 của tôi!!!
Tham gia
17/4/16
Bài viết
2,701
Được thích
2,434
Giới tính
Nam
Nghề nghiệp
Nhân viên kỹ thuật in ấn
Chào mọi người!

em có hai vấn đề nhờ mọi người hỗ trợ giúp!

Trong file này em có 2 sheet: DATA, KET QUA

Trong sheet kết quả em muốn lọc nhiều tillcode đê lọc lấy ra tất cả dữ liệu thuộc điều kiện đó và vá sắp xếp lại với nhau
Ví dụ một tillcode khi lọc ra hai kết quả lấy hai kết quả đó và khi lấy tiilcode thứ 2 mà tillcode có 3 kết quả thì lấy dữ liệu nằm kế tiếp.
em ví dụ: Tillcode 4306672760102 có hai kết quả được lấy ra.
Và cho biết vị trí kết quả nằm ở dòng nào ở trong sheet DATA.

Em cảm ơn mọi người nhiều!
 

File đính kèm

Tôi bảo đọc cả topic thì tức đã xem cái file đó bạn đính kèm ở bài #5.
Bạn biểu đạt yêu cầu của mình rõ ràng, chi tiết, chứ cứ nêu cái bạn đã biết làm chi.

Ý anh em diễn đạt bài không rõ ràng phải không Anh?
 
Upvote 0
Mình bảo là không hiểu đề bài thì hỗ trợ sao được...

Em nói lại cho Anh hiểu nhé!

Từ sheet DATA có sẵn em muốn lấy kết quả qua sheet KET QUA dựa vào điều kiện Tillcode.
- 01 tillcode có bao nhiêu kết quả lấy được thì lấy hết và cứ chọn Tillcode thứ 2 kêt quả nằm kế tiếp kết quả vừa lấy ra đó.
em muốn tạo nút xóa dữ liệu để xóa tất cả dữ liệu đi rồi nhập lại mới!

Em diễn đạt như vậy Anh đã hiểu chưa?
 
Upvote 0
Em nói lại cho Anh hiểu nhé!

Từ sheet DATA có sẵn em muốn lấy kết quả qua sheet KET QUA dựa vào điều kiện Tillcode.
- 01 tillcode có bao nhiêu kết quả lấy được thì lấy hết và cứ chọn Tillcode thứ 2 kêt quả nằm kế tiếp kết quả vừa lấy ra đó.
em muốn tạo nút xóa dữ liệu để xóa tất cả dữ liệu đi rồi nhập lại mới!

Em diễn đạt như vậy Anh đã hiểu chưa?
Tillcode lấy ở đâu? Nhập từ bàn phím hay bạn muốn tạo một cái list (*) (để chọn) được lấy từ sheet DATA? (Và tạo list này có điều kiện gì không?)
Bạn lập danh sách kết quả như thế có điều kiện gì không? có giới hạn số lượng Tillcode không hay áp dụng cho cả (*)?

-----------
Có gì sai sai... Hẹn bạn khi khác ha.
 
Upvote 0
ý là em nhập sai code thiếu hoặc sai thì không thông báo gì cả chỉ có DATAVALIDATION báo lỗi thôi. Nên em nhờ Anh khi gõ code sai hoặc thiếu thì hiển thị dòng thông báo, "Code này không đúng vui lòng nhập lại!"
Và anh ơi tạo cho em nút XOA DU LIEU trong sheet Ketqua đó Anh!

Em cảm ơn Anh!
"Code này không đúng vui lòng nhập lại!" có lẽ là làm trong DATAVALIDATION cho khỏe.
Nút xóa dữ liệu thì bạn sao chép của file đính kèm bài 6 là được.
 
Upvote 0
Upvote 0
dùng code của bạn PacificPR, bạn xem như đúng ý chưa?
code ra đúng rồi Anh ơi
Vậy cho em hỏi dữ liệu nhiều áp dụng code Anh được không?
Anh ơi !
Em nhờ anh tạo bảng thông báo là khi nhập sai hoặc thiếu code thì thông báo " Code này không đúng vui lòng nhập lại
 
Lần chỉnh sửa cuối:
Upvote 0
code ra đúng rồi Anh ơi
Anh ơi !
Em nhờ anh tạo bảng thông báo là khi nhập sai hoặc thiếu code thì thông báo " Code này không đúng vui lòng nhập lại
mình tạo thông báo rồi mà, nếu không thích đùa thì bấm chọn ô E2, chọn data validation trên menu bấm vào chổ error.. và sửa lại cho trang trọng hơn
 
Upvote 0
mình tạo thông báo rồi mà, nếu không thích đùa thì bấm chọn ô E2, chọn data validation trên menu bấm vào chổ error.. và sửa lại cho trang trọng hơn
Dạ em cũng tính tới trường hợp này rồi Anh ơi, Chắc sử dung validation quá

Em cảm ơn Anh
 
Upvote 0
Nếu như kiểu xắp xếp lại dữ liệu tại Sheet(Data) thì bạn tham khảo thử cái này nữa xem
Mã:
Sub Locdulieu()
    Dim sArr As Variant, dArr As Variant, I As Long, J As Long, K As Long
    Dim Dic As Object, ma As Variant
Set Dic = CreateObject("Scripting.Dictionary")

With Sheets("data")
    sArr = .Range("A4", .Range("I" & Rows.Count).End(3)).Value
End With
ReDim dArr(1 To UBound(sArr), 1 To 10)
For I = LBound(sArr, 1) To UBound(sArr, 1)
    Dic(sArr(I, 2)) = 1
Next I
For Each ma In Dic.keys()
    For I = 1 To UBound(sArr)
        If sArr(I, 2) = ma Then
            K = K + 1
            For J = 1 To 9
                dArr(K, J) = sArr(I, J)
            Next J
            dArr(K, 10) = I + 3
        End If
    Next I
Next
With Sheets("ket qua")
    If K Then
        .Range("A" & Range("A65535").End(3).Row + 1).Resize(K, 10) = dArr
    Else
        MsgBox "Khong tim thay du lieu"
    End If
End With
End Sub
 
Upvote 0
Nếu như kiểu xắp xếp lại dữ liệu tại Sheet(Data) thì bạn tham khảo thử cái này nữa xem
Mã:
Sub Locdulieu()
    Dim sArr As Variant, dArr As Variant, I As Long, J As Long, K As Long
    Dim Dic As Object, ma As Variant
Set Dic = CreateObject("Scripting.Dictionary")
ma = Sheets("ket qua").Range("E2")
With Sheets("data")
    sArr = .Range("A4", .Range("I" & Rows.Count).End(3)).Value
End With
ReDim dArr(1 To UBound(sArr), 1 To 10)
For I = LBound(sArr, 1) To UBound(sArr, 1)
    Dic(sArr(I, 2)) = 1
Next I
For Each ma In Dic.keys()
    For I = 1 To UBound(sArr)
        If sArr(I, 2) = ma Then
            K = K + 1
            For J = 1 To 9
                dArr(K, J) = sArr(I, J)
            Next J
            dArr(K, 10) = I + 3
        End If
    Next I
Next
With Sheets("ket qua")
    If K Then
        .Range("A" & Range("A65535").End(3).Row + 1).Resize(K, 10) = dArr
    Else
        MsgBox "Khong tim thay du lieu"
    End If
End With
End Sub

Cách này hay nè Anh,

Em cảm ơn Anh! có gì em test có lỗi gì em báo lại cho Anh!
 
Upvote 0
Nếu như kiểu xắp xếp lại dữ liệu tại Sheet(Data) thì bạn tham khảo thử cái này nữa xem
Mã:
...
For Each ma In Dic.keys()
    For I = 1 To UBound(sArr)
        If sArr(I, 2) = ma Then
            K = K + 1
            For J = 1 To 9
                dArr(K, J) = sArr(I, J)
            Next J
            dArr(K, 10) = I + 3
        End If
    Next I
Next
...
bạn dùng giải thuật nầy để giảm số lần duyệt sArr
Mã:
Sub Locdulieu1()
    Dim sArr As Variant, dArr As Variant, I As Long, J As Long, K As Long
    Dim Dic As Object, Arr As Variant, Iarr As Variant, Tmp
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("data")
    sArr = .Range("A4", .Range("I" & Rows.Count).End(3)).Value
End With
ReDim dArr(1 To UBound(sArr), 1 To 10)
For I = LBound(sArr, 1) To UBound(sArr, 1)
    Tmp = sArr(I, 2)
    If Not Dic.exists(Tmp) Then
      Dic.Add Tmp, Array(0, I)
    Else
      Arr = Dic.Item(Tmp)
      ReDim Preserve Arr(UBound(Arr) + 1)
      Arr(UBound(Arr)) = I
      Dic(Tmp) = Arr
    End If
Next I
For Each Iarr In Dic.Items()
    For n = 1 To UBound(Iarr)
        K = K + 1
        I = Iarr(n)
        For J = 1 To 9
            dArr(K, J) = sArr(I, J)
        Next J
        dArr(K, 10) = I + 3
    Next n
Next
With Sheets("ket qua")
    If K Then
        .Range("A" & Range("A65535").End(3).Row + 1).Resize(K, 10) = dArr
    Else
        MsgBox "Khong tim thay du lieu"
    End If
End With
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom