Lọc mảng nhiều điều kiện

Liên hệ QC

huypham

Thành viên mới
Tham gia
15/8/08
Bài viết
9
Được thích
0
Nhờ các cụ giúp mình bài toán này:
Mình có bảng dữ liệu sau:
Sheet1.png

Giờ mình muốn tạo 1 sheet khác, lọc riêng Mã hàng, Tên hàng, Số lượng theo điều kiện của Ngày và NCC, ví dụ như:
Sheet2.jpg
Khi thay đổi điều kiện ở ô B1 và B2 thì sẽ các giá trị từ dòng 4 sẽ cập nhật theo.
Các cụ có phương án nào hay tư vấn giúp em.
Đa tạ!
 

File đính kèm

  • Dat hang.xlsx
    67.2 KB · Đọc: 46
Nhờ các cụ giúp mình bài toán này:
Mình có bảng dữ liệu sau:
View attachment 143994

Giờ mình muốn tạo 1 sheet khác, lọc riêng Mã hàng, Tên hàng, Số lượng theo điều kiện của Ngày và NCC, ví dụ như:
View attachment 143995
Khi thay đổi điều kiện ở ô B1 và B2 thì sẽ các giá trị từ dòng 4 sẽ cập nhật theo.
Các cụ có phương án nào hay tư vấn giúp em.
Đa tạ!

Xài 1 cột phụ (cột F tại sheet Tổng hợp nhé! (Công thức thì file đính kèm.)

Còn code thì thử cái này:

[GPECODE=vb]
Sub Loc()
Dim Sh As Worksheet, Arr(), zArr()
Dim Rws As Long, J&, W&, dk1 As Date, dk2 As String
dk1 = Sheets("CHI TIET").[B1].Value
dk2 = Sheets("CHI TIET").[B2].Value
zArr = Array(2, 3, 5)
Set Sh = Sheets("TONG HOP")
With Sh.[A2]
Rws = .CurrentRegion.Rows.Count
Arr() = .Resize(Rws, 5).Value
End With
ReDim dArr(1 To Rws, 1 To 3)
For J = 1 To UBound(Arr())
If Arr(J, 1) = dk1 And Arr(J, 4) = dk2 Then
W = 1 + W
For Z = 0 To UBound(zArr)
dArr(W, Z + 1) = Arr(J, zArr(Z))
Next Z
End If
Next J
If W Then
Sheets("CHI TIET").[A4].Resize(65000, 3).ClearContents
Sheets("CHI TIET").[A4].Resize(W, 3).Value = dArr()
End If
End Sub
[/GPECODE]
 

File đính kèm

  • Dat hang.rar
    9 KB · Đọc: 81
Lần chỉnh sửa cuối:
Nhờ các cụ giúp mình bài toán này:
Mình có bảng dữ liệu sau:
View attachment 143994

Giờ mình muốn tạo 1 sheet khác, lọc riêng Mã hàng, Tên hàng, Số lượng theo điều kiện của Ngày và NCC, ví dụ như:
View attachment 143995
Khi thay đổi điều kiện ở ô B1 và B2 thì sẽ các giá trị từ dòng 4 sẽ cập nhật theo.
Các cụ có phương án nào hay tư vấn giúp em.
Đa tạ!

Bạn copy CT này vào ô D4 sau đó kéo sang, xuống cho các ô còn lại nhé:

=IFERROR(OFFSET('TONG HOP'!$A$1,SMALL(IF('TONG HOP'!$A$2:$A$9='CHI TIET'!$B$1,IF('TONG HOP'!$D$2:$D$9='CHI TIET'!$B$2,MATCH('TONG HOP'!$B$2:$B$9,'TONG HOP'!$B$2:$B$9,0),"")),ROW(1:1)),MATCH(A$3,'TONG HOP'!$A$1:$E$1,0)-1),"")

Bạn kết thúc bằng CTRL+SHIFT+ENTER
 
Còn code thì thử cái này:

[GPECODE=vb]
Sub Loc()
Dim Sh As Worksheet, Arr(), zArr()
Dim Rws As Long, J&, W&, dk1 As Date, dk2 As String
dk1 = Sheets("CHI TIET").[B1].Value
dk2 = Sheets("CHI TIET").[B2].Value
zArr = Array(2, 3, 5)
Set Sh = Sheets("TONG HOP")
With Sh.[A2]
Rws = .CurrentRegion.Rows.Count
Arr() = .Resize(Rws, 5).Value
End With
ReDim dArr(1 To Rws, 1 To 3)
For J = 1 To UBound(Arr())
If Arr(J, 1) = dk1 And Arr(J, 4) = dk2 Then
W = 1 + W
For Z = 0 To UBound(zArr)
dArr(W, Z + 1) = Arr(J, zArr(Z))
Next Z
End If
Next J
If W Then
Sheets("CHI TIET").[A4].Resize(65000, 3).ClearContents
Sheets("CHI TIET").[A4].Resize(W, 3).Value = dArr()
End If
End Sub
[/GPECODE]
Code trên chưa có ổn. Lẽ ra thì khi để trống không chọn ngày đặt hàng, chọn mỗi NCC thì ở bên dưới phải sổ tất cả dữ liệu mà mình đặt hàng của NCC đó.
 
Code trên chưa có ổn. Lẽ ra thì khi để trống không chọn ngày đặt hàng, chọn mỗi NCC thì ở bên dưới phải sổ tất cả dữ liệu mà mình đặt hàng của NCC đó.

Thử làm theo hướng bác bảo
+ Nếu cả 2 điều kiện không trống thì dò theo 2 điều kiện
+ Nếu một trong 2 trống,thì chỉ dò theo cái điều kiện Không trống

Mà cứ lẫn quẫn trong vùng If, Elseif,..........If hoài. Được cái này thì cái kia không chạy, hoặc ngược lại.Hix hixx......&&&%$R&&&%$R&&&%$R&&&%$R

Bác code mẫu đoạn này cho tôi học hỏi với, lẫn quẫn quá.
 
Thử làm theo hướng bác bảo
+ Nếu cả 2 điều kiện không trống thì dò theo 2 điều kiện
+ Nếu một trong 2 trống,thì chỉ dò theo cái điều kiện Không trống

Mà cứ lẫn quẫn trong vùng If, Elseif,..........If hoài. Được cái này thì cái kia không chạy, hoặc ngược lại.Hix hixx......&&&%$R&&&%$R&&&%$R&&&%$R

Bác code mẫu đoạn này cho tôi học hỏi với, lẫn quẫn quá.
Xem thử file này coi sao:
 

File đính kèm

  • Dat hang.7z
    62 KB · Đọc: 53
toàn sát thủ không . ngưỡng mộ ghê
 
Xem thử file này coi sao:

Hix. cảm ơn bác. Giờ đã hiểu mình sai ngay đoạn ElseIf hixxx.........

[GPECODE=vb]
Sub Loc()
Dim Sh As Worksheet, Arr(), zArr()
Dim Rws As Long, J&, W&, dk1 As Date, dk2 As String
dk1 = Sheets("CHI TIET").[B1].Value
dk2 = Sheets("CHI TIET").[B2].Value
zArr = Array(2, 3, 5)
Set Sh = Sheets("TONG HOP")
With Sh.[A2]
Rws = .CurrentRegion.Rows.Count
Arr() = .Resize(Rws, 5).Value
End With
ReDim dArr(1 To Rws, 1 To 3)
For J = 1 To UBound(Arr())
If Arr(J, 1) = dk1 And Arr(J, 4) = dk2 Then
W = 1 + W
For Z = 0 To UBound(zArr)
dArr(W, Z + 1) = Arr(J, zArr(Z))
Next Z
ElseIf Arr(J, 4) = dk2 And dk1 = Empty Then
W = 1 + W
For Z = 0 To UBound(zArr)
dArr(W, Z + 1) = Arr(J, zArr(Z))
Next Z
ElseIf Arr(J, 1) = dk1 And dk2 = Empty Then
W = 1 + W
For Z = 0 To UBound(zArr)
dArr(W, Z + 1) = Arr(J, zArr(Z))
Next Z
End If
Next J
If W Then
Sheets("CHI TIET").[A4].Resize(65000, 3).ClearContents
Sheets("CHI TIET").[A4].Resize(W, 3).Value = dArr()
End If
End Sub
[/GPECODE]
 
mình chậm chạm nên chỉ kịp ghi có 1 dòng . huhu
Mã:
If (Arr(I, 1) = dk1 Or dk1 = Empty) And (Arr(I, 4) = dk2 Or dk2 = Empty) Then
 
Hic, cảm ơn các cụ, toàn cao thủ cả __--__
E được voi đòi Hai Bà Trưng thêm cái nữa:
Trong phần Data Validation của ô NCC em muốn lọc ra danh sách các NCC trong sheet TONG HOP có được không?
Data Validation.jpg
 

File đính kèm

  • Data Validation.jpg
    Data Validation.jpg
    15.9 KB · Đọc: 140
Hic, cảm ơn các cụ, toàn cao thủ cả __--__
E được voi đòi Hai Bà Trưng thêm cái nữa:
Trong phần Data Validation của ô NCC em muốn lọc ra danh sách các NCC trong sheet TONG HOP có được không?
Đương nhiên là được, tại menu data chọn Remove Duplicates sẽ được 1 danh sách duy nhất, bấm Ctrl + F3 đặt name cho danh sách đó rồi quăng cái tên Name đã đặt đó vào list của Data Validation.
 
Đương nhiên là được, tại menu data chọn Remove Duplicates sẽ được 1 danh sách duy nhất, bấm Ctrl + F3 đặt name cho danh sách đó rồi quăng cái tên Name đã đặt đó vào list của Data Validation.

Nhưng mỗi lần thêm tên NCC mới ở sheet tổng hợp thì phải làm Remove Duplicates từ đầu. Có cách nào lọc tự động được không?
 
Nhưng mỗi lần thêm tên NCC mới ở sheet tổng hợp thì phải làm Remove Duplicates từ đầu. Có cách nào lọc tự động được không?
À. Thế thì lọc rồi thêm vào bằng code luôn. hihi. Bạn muốn gì cứ gửi file lên các thành viên sẽ giúp nhiệt tình mà.
 
À. Thế thì lọc rồi thêm vào bằng code luôn. hihi. Bạn muốn gì cứ gửi file lên các thành viên sẽ giúp nhiệt tình mà.

paperclip.png
Tập tin đính kèm
Là file của bạn luôn ấy.
 
File thực tế của bạn có được bố trí dữ liệu theo như file bài 1 bạn đưa lên không??? Nếu giống thì mới dám làm (Làm rùi mà bỏ thì phí).
File thực tế mình cũng bố trí như vậy, không thì phí công các bác. Nếu có thay đổi thì lại cố ngồi mò edit code sau, gà VB mà+-+-+-+
 
Nhờ các cụ giúp mình bài toán này:
Mình có bảng dữ liệu sau:

Giờ mình muốn tạo 1 sheet khác, lọc riêng Mã hàng, Tên hàng, Số lượng theo điều kiện của Ngày và NCC, ví dụ như:
Khi thay đổi điều kiện ở ô B1 và B2 thì sẽ các giá trị từ dòng 4 sẽ cập nhật theo.
Các cụ có phương án nào hay tư vấn giúp em.
Đa tạ!
Xem file này xem có áp dụng gì được không?
 

File đính kèm

  • Dat hang.xlsx
    10.4 KB · Đọc: 20
Thêm 1 hàm mảng tự tạo cho bạn tùy nghi lựa các tiêu chí lọc
 

File đính kèm

  • gpeUDF.rar
    18.1 KB · Đọc: 22
Cảm ơn các bác, mình áp dụng code của @giangleloi thấy chuẩn và đúng ý mình.

Xem thử file này coi sao:

Mã:
Sub Loc()
Dim Arr(), Hp(1 To 10000, 1 To 3), I As Long, J As Long, K As Long
Dim DK As String, Hdk As Date
    With Sheet1
        Arr = .Range(.[A3], .[A65000].End(3)).Resize(, 5).Value
    End With
      Hdk = Sheet2.[B1].Value2
      DK = Sheet2.[B2].Value
        For I = 1 To UBound(Arr, 1)
              If Arr(I, 1) = Hdk And Arr(I, 4) = DK Then
                K = K + 1
                Hp(K, 1) = Arr(I, 2)
                Hp(K, 2) = Arr(I, 3)
                Hp(K, 3) = Arr(I, 5)
             ElseIf Arr(I, 4) = DK And Hdk = Empty Then
                K = K + 1
                Hp(K, 1) = Arr(I, 2)
                Hp(K, 2) = Arr(I, 3)
                Hp(K, 3) = Arr(I, 5)
             ElseIf Arr(I, 1) = Hdk And DK = Empty Then
                K = K + 1
                Hp(K, 1) = Arr(I, 2)
                Hp(K, 2) = Arr(I, 3)
                Hp(K, 3) = Arr(I, 5)
          End If
        Next
    With Sheet2
        .[A4:C10000].ClearContents
         If K Then .[A4].Resize(K, 3) = Hp
    End With
End Sub

Mình bắt chước code này để thêm code lọc danh sách NCC, chưa triệt để nhưng thấy ok rồi.

Mã:
Sub LOCNCC()Dim Arr(), Hp(1 To 10000, 1 To 3), I As Long, J As Long, K As Long
Dim Hdk As Date
    With Sheet1
        Arr = .Range(.[A3], .[A65000].End(3)).Resize(, 5).Value
    End With
        Hdk = Sheet2.[B1].Value2
    For I = 1 To UBound(Arr, 1)
        If Arr(I, 1) = Hdk Then
            K = K + 1
            Hp(K, 1) = Arr(I, 4)
        End If
    Next
        With Sheet5
        .[A2:A10000].ClearContents
         If K Then .[A2].Resize(K, 1) = Hp
        End With
        With Sheet5
        .[A2:A10000].RemoveDuplicates Columns:=1, Header:=xlNo
        End With
End Sub
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom