Lọc ra danh sách theo điều kiện và loại bỏ trùng lặp

Liên hệ QC

hoangtuaotrang_hp_vn

Thành viên tích cực
Tham gia
17/5/09
Bài viết
808
Được thích
680
Anh/chị giúp em lọc ra danh sách các mã con dựa theo điều kiện là khi nhập mã mẹ (loại bỏ trùng)

Nhập mã mẹ ở cột B thì cột C sẽ sổ ra danh sách mã con, em dùng hàm:
=IFERROR((@INDEX('SYSTEM BOM'!$O$2:$O$2809,AGGREGATE(15,6,ROW($1:$30000)/('SYSTEM BOM'!$F$2:$F$2809=$B$3),ROW($A1)))),"")

thì đã sổ ra được danh sách mã con theo mã mẹ rồi, tuy nhiên lại bị trùng lặp, anh/chị giúp em công thức nào đó sổ được danh sách con mà loại bỏ trùng lặp không ạ?


1607437056007.png
 

File đính kèm

  • Lọc danh sách theo điều kiện và loại bỏ trùng lặp.xlsx
    307.3 KB · Đọc: 27
Thử:
Mã:
=IFERROR(INDEX('SYSTEM BOM'!O$2:O$2809,MATCH(1,('SYSTEM BOM'!F$2:F$2809=B$3)-COUNTIF(C$2:C2,'SYSTEM BOM'!O$2:O$2809),)),"")
 
Anh/chị giúp em lọc ra danh sách các mã con dựa theo điều kiện là khi nhập mã mẹ (loại bỏ trùng)

Nhập mã mẹ ở cột B thì cột C sẽ sổ ra danh sách mã con, em dùng hàm:
=IFERROR((@INDEX('SYSTEM BOM'!$O$2:$O$2809,AGGREGATE(15,6,ROW($1:$30000)/('SYSTEM BOM'!$F$2:$F$2809=$B$3),ROW($A1)))),"")

thì đã sổ ra được danh sách mã con theo mã mẹ rồi, tuy nhiên lại bị trùng lặp, anh/chị giúp em công thức nào đó sổ được danh sách con mà loại bỏ trùng lặp không ạ?


View attachment 250844
Nếu dùng Office 365 thì dùng hàm Filter và Unique
Mã:
L3=UNIQUE(FILTER('SYSTEM BOM'!$O$2:$O$2809,('SYSTEM BOM'!$F$2:$F$2809=Sheet1!$B$3)))

1607482123665.png
 
Anh/chị giúp em lọc ra danh sách các mã con dựa theo điều kiện là khi nhập mã mẹ (loại bỏ trùng)

Nhập mã mẹ ở cột B thì cột C sẽ sổ ra danh sách mã con, em dùng hàm:
=IFERROR((@INDEX('SYSTEM BOM'!$O$2:$O$2809,AGGREGATE(15,6,ROW($1:$30000)/('SYSTEM BOM'!$F$2:$F$2809=$B$3),ROW($A1)))),"")

thì đã sổ ra được danh sách mã con theo mã mẹ rồi, tuy nhiên lại bị trùng lặp, anh/chị giúp em công thức nào đó sổ được danh sách con mà loại bỏ trùng lặp không ạ?


View attachment 250844
Hoặc thử (kéo đến hết):
Mã:
=IFERROR(INDEX('SYSTEM BOM'!$O$2:$O$2809,MATCH(0,INDEX(COUNTIF($C$2:C2,'SYSTEM BOM'!$O$2:$O$2809)+('SYSTEM BOM'!$F$2:$F$2809<>LOOKUP(2,1/($B$3:B3<>""),$B$3:B3)),),0)),"")
 
Cái này chỉ có thể dùng VBA, công thức thì "oải"!

Dạ, nếu VBA thì có thêm được điều kiện này không chú?

Sau khi mình gõ (dán) mã mẹ vào B3, nó sổ ra danh sách con ở cột C (C3:C8)

rồi mình gõ (dãn) mã tiếp theo vào B9 (tiếp theo dòng cuối cùng của mã con của mã mẹ phía trên) thì nó sổ ra các mã con của mã mẹ ở B9 không ạ? cứ thế tiếp tục ạ..v.v...



1607493531270.png
 
Sao không dùng pivottable cho dễ nhỉ muốn lấy mã nào thì chọn mã đấy thôi

1607495288791.png
 

File đính kèm

  • Lọc danh sách theo điều kiện và loại bỏ trùng lặp.xlsx
    671 KB · Đọc: 4
Dạ, nếu VBA thì có thêm được điều kiện này không chú?

Sau khi mình gõ (dán) mã mẹ vào B3, nó sổ ra danh sách con ở cột C (C3:C8)

rồi mình gõ (dãn) mã tiếp theo vào B9 (tiếp theo dòng cuối cùng của mã con của mã mẹ phía trên) thì nó sổ ra các mã con của mã mẹ ở B9 không ạ? cứ thế tiếp tục ạ..v.v...



View attachment 250888
Chép code sau vào sự kiện Worksheet_Change của Sheet1
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B3:B54")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
    With CreateObject("ADODB.Recordset")
        .Open ("Select Distinct [Material code (lower level)] from [SYSTEM BOM$A1:O2809] where [Material coding] like '" & Target & "'"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
        Target.Offset(, 1).CopyFromRecordset .DataSource
    End With

End Sub
 
Sao không dùng pivottable cho dễ nhỉ muốn lấy mã nào thì chọn mã đấy thôi

View attachment 250896
Dạ em thử Pivot thì thấy OK rùi đó, cơ mà, sếp bắt phải làm báo cáo hàng ngày theo định dạng này ạ. Phần mã mẹ không cố định (nếu bên kế hoạch thay đổi), nên phải gõ hoặc dán thủ công vào....để mục đính tính toán cho các cột phía sau í ạ (định lượng, số lượng tiêu hao....)
Bài đã được tự động gộp:

Chép code sau vào sự kiện Worksheet_Change của Sheet1
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B3:B54")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
    With CreateObject("ADODB.Recordset")
        .Open ("Select Distinct [Material code (lower level)] from [SYSTEM BOM$A1:O2809] where [Material coding] like '" & Target & "'"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
        Target.Offset(, 1).CopyFromRecordset .DataSource
    End With

End Sub
hì, thêm hộ em đoạn code: khi xóa mã mẹ thì mã con cũng bị xóa theo với, chứ giờ xóa mã mẹ, mã con vẫn còn đó ạ :)
 
hì, thêm hộ em đoạn code: khi xóa mã mẹ thì mã con cũng bị xóa theo với, chứ giờ xóa mã mẹ, mã con vẫn còn đó ạ :)
Lưu ý dùng code sau khi đưa mã mới vào phải bỏ trống 1 dòng. Bạn tìm cách khắc phục nhé
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B3:B54")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
    With CreateObject("ADODB.Recordset")
        .Open ("Select Distinct [Material code (lower level)] from [SYSTEM BOM$A1:O2809] where [Material coding] like '" & Target & "'"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1
        If .RecordCount > 0 Then
            Target.Offset(, 1).CopyFromRecordset .DataSource
        Else
            Range(Target.Offset(, 1), Target.Offset(, 1).End(xlDown)).ClearContents
        End If
    End With

End Sub
 
Dạ em thử Pivot thì thấy OK rùi đó, cơ mà, sếp bắt phải làm báo cáo hàng ngày theo định dạng này ạ. Phần mã mẹ không cố định (nếu bên kế hoạch thay đổi), nên phải gõ hoặc dán thủ công vào....để mục đính tính toán cho các cột phía sau í ạ (định lượng, số lượng tiêu hao....)
Phần mã mẹ thì cứ cần mã nào thì tích chọn mã đấy thôi chứ có cố định đâu, bao mã chẳng được. Hơn nữa tính toán số báo cáo nếu đã có bên bảng dữ liệu thì pivottable càng chuẩn hơn
 
Phần mã mẹ thì cứ cần mã nào thì tích chọn mã đấy thôi chứ có cố định đâu, bao mã chẳng được. Hơn nữa tính toán số báo cáo nếu đã có bên bảng dữ liệu thì pivottable càng chuẩn hơn
Người ta nhập liệu bạn à. Pivot Table thì làm sao nhập liệu?
 
sếp bắt phải làm báo cáo hàng ngày theo định dạng này ạ. Phần mã mẹ không cố định

Người ta nhập liệu bạn à. Pivot Table thì làm sao nhập liệu?
Thớt bảo báo cáo mà, mình đang hiểu dữ liệu trong báo cáo lấy bên sheet "SYSTEM BOM" ra nên mình mới bảo dùng pivottable khả năng hay hơn vì dữ liệu gốc nhìn thấy tương đối ổn nếu dùng PV
 
Anh/chị giúp em lọc ra danh sách các mã con dựa theo điều kiện là khi nhập mã mẹ (loại bỏ trùng)

Nhập mã mẹ ở cột B thì cột C sẽ sổ ra danh sách mã con, em dùng hàm:
=IFERROR((@INDEX('SYSTEM BOM'!$O$2:$O$2809,AGGREGATE(15,6,ROW($1:$30000)/('SYSTEM BOM'!$F$2:$F$2809=$B$3),ROW($A1)))),"")

thì đã sổ ra được danh sách mã con theo mã mẹ rồi, tuy nhiên lại bị trùng lặp, anh/chị giúp em công thức nào đó sổ được danh sách con mà loại bỏ trùng lặp không ạ?


View attachment 250844
Nếu sytem sắp xếp liền mạch như vậy thì bạn tham khảo công thức.
Mình thấy pivot là ổn theo bạn hongtrang
 

File đính kèm

  • Lọc danh sách theo điều kiện và loại bỏ trùng lặp.xlsx
    305 KB · Đọc: 5
Dạ, nếu VBA thì có thêm được điều kiện này không chú?
Sau khi mình gõ (dán) mã mẹ vào B3, nó sổ ra danh sách con ở cột C (C3:C8) rồi mình gõ (dãn) mã tiếp theo vào B9 (tiếp theo dòng cuối cùng của mã con của mã mẹ phía trên) thì nó sổ ra các mã con của mã mẹ ở B9 không ạ? cứ thế tiếp tục ạ..v.v...
Góp ý cho bạn:
1/ Đến bài 15 rồi mà chưa giải quyết được vấn đề là do bạn diễn giải không cụ thể, rỏ ràng.
2/ Với yêu cầu này thì nên dùng 1 sheet lọc, sau đó muốn gán dữ liệu chỗ nào thì cần nêu rỏ để các thành viên hiểu
 
Góp ý cho bạn:
1/ Đến bài 15 rồi mà chưa giải quyết được vấn đề là do bạn diễn giải không cụ thể, rỏ ràng.
2/ Với yêu cầu này thì nên dùng 1 sheet lọc, sau đó muốn gán dữ liệu chỗ nào thì cần nêu rỏ để các thành viên hiểu
Dạ, cháu xin rút kinh nghiệm cho lần sau ạ,
Code ở bài 11 dùng rất ổn rồi ạ
 
Web KT
Back
Top Bottom