Lọc mảng nhiều điều kiện (4 người xem)

  • Thread starter Thread starter huypham
  • Ngày gửi Ngày gửi
Liên hệ QC

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

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

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 đó.
 
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

toàn sát thủ không . ngưỡng mộ ghê
 
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: 141
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

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

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:
To huypham Bạn bỏ bớt một cái With Sheet5 đi cho chung lên trên luôn cho nó gọn
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
 
Trong code của bạn huypham có khai báo Dim Hdk As Date và Hdk=Sheet2.[B1].Value2
Theo mình đã khai báo kiểu Date thì nên dùng Value, tuy ở trường hợp này code chạy đúng nhưng bạn không nên lẫn lộn value và value2. Value2 chuyển đổi giá trị Date sang Number nhưng do Hdk có kiểu Date rồi nên Number lại được chuyển về kiểu Date, còn Value sẽ giữ nguyên kiểu Date.
 
Trong code của bạn huypham có khai báo Dim Hdk As Date và Hdk=Sheet2.[B1].Value2
Theo mình đã khai báo kiểu Date thì nên dùng Value, tuy ở trường hợp này code chạy đúng nhưng bạn không nên lẫn lộn value và value2. Value2 chuyển đổi giá trị Date sang Number nhưng do Hdk có kiểu Date rồi nên Number lại được chuyển về kiểu Date, còn Value sẽ giữ nguyên kiểu Date.
Thấy bạn nói lại nhớ hôm Anh hải qua chỉ code Value & Value2..........Giờ mình thật sự hiểu Value Và Value2............Cảm ơn Bạn
PHP:
Sub Value_Value2()
    [A1] = Date
    [C1] = [A1].Value2
    [E1] = [A1].Value
End Sub
 
Web KT

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

Back
Top Bottom